PageSourceSearch

https://railsguides.jp/assets/application-4180822f2ab92d33017da20e0e2534adddf3ed219caea290056a6a1f25195c1d.js

js railsguides.jp collected 2026-09-24 08:41:39 UTC 1,205,925 bytes, 27,880 lines download raw bytes

1/*
2Unobtrusive JavaScript
3https://github.com/rails/rails/blob/main/actionview/app/javascript
4Released under the MIT license
5 */
6(function(global, factory) {
7  typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, 
8  global.Rails = factory());
9})(this, (function() {
10  "use strict";
11  const linkClickSelector = "a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]";
12  const buttonClickSelector = {
13    selector: "button[data-remote]:not([form]), button[data-confirm]:not([form])",
14    exclude: "form button"
15  };
16  const inputChangeSelector = "select[data-remote], input[data-remote], textarea[data-remote]";
17  const formSubmitSelector = "form:not([data-turbo=true])";
18  const formInputClickSelector = "form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])";
19  const formDisableSelector = "input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled";
20  const formEnableSelector = "input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled";
21  const fileInputSelector = "input[name][type=file]:not([disabled])";
22  const linkDisableSelector = "a[data-disable-with], a[data-disable]";
23  const buttonDisableSelector = "button[data-remote][data-disable-with], button[data-remote][data-disable]";
24  let nonce = null;
25  const loadCSPNonce = () => {
26    const metaTag = document.querySelector("meta[name=csp-nonce]");
27    return nonce = metaTag && metaTag.content;
28  };
29  const cspNonce = () => nonce || loadCSPNonce();
30  const m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;
31  const matches = function(element, selector) {
32    if (selector.exclude) {
33      return m.call(element, selector.selector) && !m.call(element, selector.exclude);
34    } else {
35      return m.call(element, selector);
36    }
37  };
38  const EXPANDO = "_ujsData";
39  const getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;
40  const setData = function(element, key, value) {
41    if (!element[EXPANDO]) {
42      element[EXPANDO] = {};
43    }
44    return element[EXPANDO][key] = value;
45  };
46  const $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));
47  const isContentEditable = function(element) {
48    var isEditable = false;
49    do {
50      if (element.isContentEditable) {
51        isEditable = true;
52        break;
53      }
54      element = element.parentElement;
55    } while (element);
56    return isEditable;
57  };
58  const csrfToken = () => {
59    const meta = document.querySelector("meta[name=csrf-token]");
60    return meta && meta.content;
61  };
62  const csrfParam = () => {
63    const meta = document.querySelector("meta[name=csrf-param]");
64    return meta && meta.content;
65  };
66  const CSRFProtection = xhr => {
67    const token = csrfToken();
68    if (token) {
69      return xhr.setRequestHeader("X-CSRF-Token", token);
70    }
71  };
72  const refreshCSRFTokens = () => {
73    const token = csrfToken();
74    const param = csrfParam();
75    if (token && param) {
76      return $('form input[name="' + param + '"]').forEach((input => input.value = token));
77    }
78  };
79  const AcceptHeaders = {
80    "*": "*/*",
81    text: "text/plain",
82    html: "text/html",
83    xml: "application/xml, text/xml",
84    json: "application/json, text/javascript",
85    script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
86  };
87  const ajax = options => {
88    options = prepareOptions(options);
89    var xhr = createXHR(options, (function() {
90      const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader("Content-Type"));
91      if (Math.floor(xhr.status / 100) === 2) {
92        if (typeof options.success === "function") {
93          options.success(response, xhr.statusText, xhr);
94        }
95      } else {
96        if (typeof options.error === "function") {
97          options.error(response, xhr.statusText, xhr);
98        }
99      }
100      return typeof options.complete === "function" ? options.complete(xhr, xhr.statusText) : undefined;
101    }));
102    if (options.beforeSend && !options.beforeSend(xhr, options)) {
103      return false;
104    }
105    if (xhr.readyState === XMLHttpRequest.OPENED) {
106      return xhr.send(options.data);
107    }
108  };
109  var prepareOptions = function(options) {
110    options.url = options.url || location.href;
111    options.type = options.type.toUpperCase();
112    if (options.type === "GET" && options.data) {
113      if (options.url.indexOf("?") < 0) {
114        options.url += "?" + options.data;
115      } else {
116        options.url += "&" + options.data;
117      }
118    }
119    if (!(options.dataType in AcceptHeaders)) {
120      options.dataType = "*";
121    }
122    options.accept = AcceptHeaders[options.dataType];
123    if (options.dataType !== "*") {
124      options.accept += ", */*; q=0.01";
125    }
126    return options;
127  };
128  var createXHR = function(options, done) {
129    const xhr = new XMLHttpRequest;
130    xhr.open(options.type, options.url, true);
131    xhr.setRequestHeader("Accept", options.accept);
132    if (typeof options.data === "string") {
133      xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
134    }
135    if (!options.crossDomain) {
136      xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
137      CSRFProtection(xhr);
138    }
139    xhr.withCredentials = !!options.withCredentials;
140    xhr.onreadystatechange = function() {
141      if (xhr.readyState === XMLHttpRequest.DONE) {
142        return done(xhr);
143      }
144    };
145    return xhr;
146  };
147  var processResponse = function(response, type) {
148    if (typeof response === "string" && typeof type === "string") {
149      if (type.match(/\bjson\b/)) {
150        try {
151          response = JSON.parse(response);
152        } catch (error) {}
153      } else if (type.match(/\b(?:java|ecma)script\b/)) {
154        const script = document.createElement("script");
155        script.setAttribute("nonce", cspNonce());
156        script.text = response;
157        document.head.appendChild(script).parentNode.removeChild(script);
158      } else if (type.match(/\b(xml|html|svg)\b/)) {
159        const parser = new DOMParser;
160        type = type.replace(/;.+/, "");
161        try {
162          response = parser.parseFromString(response, type);
163        } catch (error1) {}
164      }
165    }
166    return response;
167  };
168  const href = element => element.href;
169  const isCrossDomain = function(url) {
170    const originAnchor = document.createElement("a");
171    originAnchor.href = location.href;
172    const urlAnchor = document.createElement("a");
173    try {
174      urlAnchor.href = url;
175      return !((!urlAnchor.protocol || urlAnchor.protocol === ":") && !urlAnchor.host || originAnchor.protocol + "//" + originAnchor.host === urlAnchor.protocol + "//" + urlAnchor.host);
176    } catch (e) {
177      return true;
178    }
179  };
180  let preventDefault;
181  let {CustomEvent: CustomEvent} = window;
182  if (typeof CustomEvent !== "function") {
183    CustomEvent = function(event, params) {
184      const evt = document.createEvent("CustomEvent");
185      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
186      return evt;
187    };
188    CustomEvent.prototype = window.Event.prototype;
189    ({preventDefault: preventDefault} = CustomEvent.prototype);
190    CustomEvent.prototype.preventDefault = function() {
191      const result = preventDefault.call(this);
192      if (this.cancelable && !this.defaultPrevented) {
193        Object.defineProperty(this, "defaultPrevented", {
194          get() {
195            return true;
196          }
197        });
198      }
199      return result;
200    };
201  }
202  const fire = (obj, name, data) => {
203    const event = new CustomEvent(name, {
204      bubbles: true,
205      cancelable: true,
206      detail: data
207    });
208    obj.dispatchEvent(event);
209    return !event.defaultPrevented;
210  };
211  const stopEverything = e => {
212    fire(e.target, "ujs:everythingStopped");
213    e.preventDefault();
214    e.stopPropagation();
215    e.stopImmediatePropagation();
216  };
217  const delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {
218    let {target: target} = e;
219    while (!!(target instanceof Element) && !matches(target, selector)) {
220      target = target.parentNode;
221    }
222    if (target instanceof Element && handler.call(target, e) === false) {
223      e.preventDefault();
224      e.stopPropagation();
225    }
226  }));
227  const toArray = e => Array.prototype.slice.call(e);
228  const serializeElement = (element, additionalParam) => {
229    let inputs = [ element ];
230    if (matches(element, "form")) {
231      inputs = toArray(element.elements);
232    }
233    const params = [];
234    inputs.forEach((function(input) {
235      if (!input.name || input.disabled) {
236        return;
237      }
238      if (matches(input, "fieldset[disabled] *")) {
239        return;
240      }
241      if (matches(input, "select")) {
242        toArray(input.options).forEach((function(option) {
243          if (option.selected) {
244            params.push({
245              name: input.name,
246              value: option.value
247            });
248          }
249        }));
250      } else if (input.checked || [ "radio", "checkbox", "submit" ].indexOf(input.type) === -1) {
251        params.push({
252          name: input.name,
253          value: input.value
254        });
255      }
256    }));
257    if (additionalParam) {
258      params.push(additionalParam);
259    }
260    return params.map((function(param) {
261      if (param.name) {
262        return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;
263      } else {
264        return param;
265      }
266    })).join("&");
267  };
268  const formElements = (form, selector) => {
269    if (matches(form, "form")) {
270      return toArray(form.elements).filter((el => matches(el, selector)));
271    } else {
272      return toArray(form.querySelectorAll(selector));
273    }
274  };
275  const handleConfirmWithRails = rails => function(e) {
276    if (!allowAction(this, rails)) {
277      stopEverything(e);
278    }
279  };
280  const confirm = (message, element) => window.confirm(message);
281  var allowAction = function(element, rails) {
282    let callback;
283    const message = element.getAttribute("data-confirm");
284    if (!message) {
285      return true;
286    }
287    let answer = false;
288    if (fire(element, "confirm")) {
289      try {
290        answer = rails.confirm(message, element);
291      } catch (error) {}
292      callback = fire(element, "confirm:complete", [ answer ]);
293    }
294    return answer && callback;
295  };
296  const handleDisabledElement = function(e) {
297    const element = this;
298    if (element.disabled) {
299      stopEverything(e);
300    }
301  };
302  const enableElement = e => {
303    let element;
304    if (e instanceof Event) {
305      if (isXhrRedirect(e)) {
306        return;
307      }
308      element = e.target;
309    } else {
310      element = e;
311    }
312    if (isContentEditable(element)) {
313      return;
314    }
315    if (matches(element, linkDisableSelector)) {
316      return enableLinkElement(element);
317    } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {
318      return enableFormElement(element);
319    } else if (matches(element, formSubmitSelector)) {
320      return enableFormElements(element);
321    }
322  };
323  const disableElement = e => {
324    const element = e instanceof Event ? e.target : e;
325    if (isContentEditable(element)) {
326      return;
327    }
328    if (matches(element, linkDisableSelector)) {
329      return disableLinkElement(element);
330    } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {
331      return disableFormElement(element);
332    } else if (matches(element, formSubmitSelector)) {
333      return disableFormElements(element);
334    }
335  };
336  var disableLinkElement = function(element) {
337    if (getData(element, "ujs:disabled")) {
338      return;
339    }
340    const replacement = element.getAttribute("data-disable-with");
341    if (replacement != null) {
342      setData(element, "ujs:enable-with", element.innerHTML);
343      element.innerHTML = replacement;
344    }
345    element.addEventListener("click", stopEverything);
346    return setData(element, "ujs:disabled", true);
347  };
348  var enableLinkElement = function(element) {
349    const originalText = getData(element, "ujs:enable-with");
350    if (originalText != null) {
351      element.innerHTML = originalText;
352      setData(element, "ujs:enable-with", null);
353    }
354    element.removeEventListener("click", stopEverything);
355    return setData(element, "ujs:disabled", null);
356  };
357  var disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);
358  var disableFormElement = function(element) {
359    if (getData(element, "ujs:disabled")) {
360      return;
361    }
362    const replacement = element.getAttribute("data-disable-with");
363    if (replacement != null) {
364      if (matches(element, "button")) {
365        setData(element, "ujs:enable-with", element.innerHTML);
366        element.innerHTML = replacement;
367      } else {
368        setData(element, "ujs:enable-with", element.value);
369        element.value = replacement;
370      }
371    }
372    element.disabled = true;
373    return setData(element, "ujs:disabled", true);
374  };
375  var enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));
376  var enableFormElement = function(element) {
377    const originalText = getData(element, "ujs:enable-with");
378    if (originalText != null) {
379      if (matches(element, "button")) {
380        element.innerHTML = originalText;
381      } else {
382        element.value = originalText;
383      }
384      setData(element, "ujs:enable-with", null);
385    }
386    element.disabled = false;
387    return setData(element, "ujs:disabled", null);
388  };
389  var isXhrRedirect = function(event) {
390    const xhr = event.detail ? event.detail[0] : undefined;
391    return xhr && xhr.getResponseHeader("X-Xhr-Redirect");
392  };
393  const handleMethodWithRails = rails => function(e) {
394    const link = this;
395    const method = link.getAttribute("data-method");
396    if (!method) {
397      return;
398    }
399    if (isContentEditable(this)) {
400      return;
401    }
402    const href = rails.href(link);
403    const csrfToken$1 = csrfToken();
404    const csrfParam$1 = csrfParam();
405    const form = document.createElement("form");
406    let formContent = `<input name='_method' value='${method}' type='hidden' />`;
407    if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {
408      formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;
409    }
410    formContent += '<input type="submit" />';
411    form.method = "post";
412    form.action = href;
413    form.target = link.target;
414    form.innerHTML = formContent;
415    form.style.display = "none";
416    document.body.appendChild(form);
417    form.querySelector('[type="submit"]').click();
418    stopEverything(e);
419  };
420  const isRemote = function(element) {
421    const value = element.getAttribute("data-remote");
422    return value != null && value !== "false";
423  };
424  const handleRemoteWithRails = rails => function(e) {
425    let data, method, url;
426    const element = this;
427    if (!isRemote(element)) {
428      return true;
429    }
430    if (!fire(element, "ajax:before")) {
431      fire(element, "ajax:stopped");
432      return false;
433    }
434    if (isContentEditable(element)) {
435      fire(element, "ajax:stopped");
436      return false;
437    }
438    const withCredentials = element.getAttribute("data-with-credentials");
439    const dataType = element.getAttribute("data-type") || "script";
440    if (matches(element, formSubmitSelector)) {
441      const button = getData(element, "ujs:submit-button");
442      method = getData(element, "ujs:submit-button-formmethod") || element.getAttribute("method") || "get";
443      url = getData(element, "ujs:submit-button-formaction") || element.getAttribute("action") || location.href;
444      if (method.toUpperCase() === "GET") {
445        url = url.replace(/\?.*$/, "");
446      }
447      if (element.enctype === "multipart/form-data") {
448        data = new FormData(element);
449        if (button != null) {
450          data.append(button.name, button.value);
451        }
452      } else {
453        data = serializeElement(element, button);
454      }
455      setData(element, "ujs:submit-button", null);
456      setData(element, "ujs:submit-button-formmethod", null);
457      setData(element, "ujs:submit-button-formaction", null);
458    } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {
459      method = element.getAttribute("data-method");
460      url = element.getAttribute("data-url");
461      data = serializeElement(element, element.getAttribute("data-params"));
462    } else {
463      method = element.getAttribute("data-method");
464      url = rails.href(element);
465      data = element.getAttribute("data-params");
466    }
467    ajax({
468      type: method || "GET",
469      url: url,
470      data: data,
471      dataType: dataType,
472      beforeSend(xhr, options) {
473        if (fire(element, "ajax:beforeSend", [ xhr, options ])) {
474          return fire(element, "ajax:send", [ xhr ]);
475        } else {
476          fire(element, "ajax:stopped");
477          return false;
478        }
479      },
480      success(...args) {
481        return fire(element, "ajax:success", args);
482      },
483      error(...args) {
484        return fire(element, "ajax:error", args);
485      },
486      complete(...args) {
487        return fire(element, "ajax:complete", args);
488      },
489      crossDomain: isCrossDomain(url),
490      withCredentials: withCredentials != null && withCredentials !== "false"
491    });
492    stopEverything(e);
493  };
494  const formSubmitButtonClick = function(e) {
495    const button = this;
496    const {form: form} = button;
497    if (!form) {
498      return;
499    }
500    if (button.name) {
501      setData(form, "ujs:submit-button", {
502        name: button.name,
503        value: button.value
504      });
505    }
506    setData(form, "ujs:formnovalidate-button", button.formNoValidate);
507    setData(form, "ujs:submit-button-formaction", button.getAttribute("formaction"));
508    return setData(form, "ujs:submit-button-formmethod", button.getAttribute("formmethod"));
509  };
510  const preventInsignificantClick = function(e) {
511    const link = this;
512    const method = (link.getAttribute("data-method") || "GET").toUpperCase();
513    const data = link.getAttribute("data-params");
514    const metaClick = e.metaKey || e.ctrlKey;
515    const insignificantMetaClick = metaClick && method === "GET" && !data;
516    const nonPrimaryMouseClick = e.button != null && e.button !== 0;
517    if (nonPrimaryMouseClick || insignificantMetaClick) {
518      e.stopImmediatePropagation();
519    }
520  };
521  const Rails = {
522    $: $,
523    ajax: ajax,
524    buttonClickSelector: buttonClickSelector,
525    buttonDisableSelector: buttonDisableSelector,
526    confirm: confirm,
527    cspNonce: cspNonce,
528    csrfToken: csrfToken,
529    csrfParam: csrfParam,
530    CSRFProtection: CSRFProtection,
531    delegate: delegate,
532    disableElement: disableElement,
533    enableElement: enableElement,
534    fileInputSelector: fileInputSelector,
535    fire: fire,
536    formElements: formElements,
537    formEnableSelector: formEnableSelector,
538    formDisableSelector: formDisableSelector,
539    formInputClickSelector: formInputClickSelector,
540    formSubmitButtonClick: formSubmitButtonClick,
541    formSubmitSelector: formSubmitSelector,
542    getData: getData,
543    handleDisabledElement: handleDisabledElement,
544    href: href,
545    inputChangeSelector: inputChangeSelector,
546    isCrossDomain: isCrossDomain,
547    linkClickSelector: linkClickSelector,
548    linkDisableSelector: linkDisableSelector,
549    loadCSPNonce: loadCSPNonce,
550    matches: matches,
551    preventInsignificantClick: preventInsignificantClick,
552    refreshCSRFTokens: refreshCSRFTokens,
553    serializeElement: serializeElement,
554    setData: setData,
555    stopEverything: stopEverything
556  };
557  const handleConfirm = handleConfirmWithRails(Rails);
558  Rails.handleConfirm = handleConfirm;
559  const handleMethod = handleMethodWithRails(Rails);
560  Rails.handleMethod = handleMethod;
561  const handleRemote = handleRemoteWithRails(Rails);
562  Rails.handleRemote = handleRemote;
563  const start = function() {
564    if (window._rails_loaded) {
565      throw new Error("rails-ujs has already been loaded!");
566    }
567    window.addEventListener("pageshow", (function() {
568      $(formEnableSelector).forEach((function(el) {
569        if (getData(el, "ujs:disabled")) {
570          enableElement(el);
571        }
572      }));
573      $(linkDisableSelector).forEach((function(el) {
574        if (getData(el, "ujs:disabled")) {
575          enableElement(el);
576        }
577      }));
578    }));
579    delegate(document, linkDisableSelector, "ajax:complete", enableElement);
580    delegate(document, linkDisableSelector, "ajax:stopped", enableElement);
581    delegate(document, buttonDisableSelector, "ajax:complete", enableElement);
582    delegate(document, buttonDisableSelector, "ajax:stopped", enableElement);
583    delegate(document, linkClickSelector, "click", preventInsignificantClick);
584    delegate(document, linkClickSelector, "click", handleDisabledElement);
585    delegate(document, linkClickSelector, "click", handleConfirm);
586    delegate(document, linkClickSelector, "click", disableElement);
587    delegate(document, linkClickSelector, "click", handleRemote);
588    delegate(document, linkClickSelector, "click", handleMethod);
589    delegate(document, buttonClickSelector, "click", preventInsignificantClick);
590    delegate(document, buttonClickSelector, "click", handleDisabledElement);
591    delegate(document, buttonClickSelector, "click", handleConfirm);
592    delegate(document, buttonClickSelector, "click", disableElement);
593    delegate(document, buttonClickSelector, "click", handleRemote);
594    delegate(document, inputChangeSelector, "change", handleDisabledElement);
595    delegate(document, inputChangeSelector, "change", handleConfirm);
596    delegate(document, inputChangeSelector, "change", handleRemote);
597    delegate(document, formSubmitSelector, "submit", handleDisabledElement);
598    delegate(document, formSubmitSelector, "submit", handleConfirm);
599    delegate(document, formSubmitSelector, "submit", handleRemote);
600    delegate(document, formSubmitSelector, "submit", (e => setTimeout((() => disableElement(e)), 13)));
601    delegate(document, formSubmitSelector, "ajax:send", disableElement);
602    delegate(document, formSubmitSelector, "ajax:complete", enableElement);
603    delegate(document, formInputClickSelector, "click", preventInsignificantClick);
604    delegate(document, formInputClickSelector, "click", handleDisabledElement);
605    delegate(document, formInputClickSelector, "click", handleConfirm);
606    delegate(document, formInputClickSelector, "click", formSubmitButtonClick);
607    document.addEventListener("DOMContentLoaded", refreshCSRFTokens);
608    document.addEventListener("DOMContentLoaded", loadCSPNonce);
609    return window._rails_loaded = true;
610  };
611  Rails.start = start;
612  if (typeof jQuery !== "undefined" && jQuery && jQuery.ajax) {
613    if (jQuery.rails) {
614      throw new Error("If you load both jquery_ujs and rails-ujs, use rails-ujs only.");
615    }
616    jQuery.rails = Rails;
617    jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {
618      if (!options.crossDomain) {
619        return CSRFProtection(xhr);
620      }
621    }));
622  }
623  if (typeof exports !== "object" && typeof module === "undefined") {
624    window.Rails = Rails;
625    if (fire(document, "rails:attachBindings")) {
626      start();
627    }
628  }
629  return Rails;
630}));
631/*!
632 * jQuery JavaScript Library v1.12.4
633 * http://jquery.com/
634 *
635 * Includes Sizzle.js
636 * http://sizzlejs.com/
637 *
638 * Copyright jQuery Foundation and other contributors
639 * Released under the MIT license
640 * http://jquery.org/license
641 *
642 * Date: 2016-05-20T17:17Z
643 */
644
645(function( global, factory ) {
646
647	if ( typeof module === "object" && typeof module.exports === "object" ) {
648		// For CommonJS and CommonJS-like environments where a proper `window`
649		// is present, execute the factory and get jQuery.
650		// For environments that do not have a `window` with a `document`
651		// (such as Node.js), expose a factory as module.exports.
652		// This accentuates the need for the creation of a real `window`.
653		// e.g. var jQuery = require("jquery")(window);
654		// See ticket #14549 for more info.
655		module.exports = global.document ?
656			factory( global, true ) :
657			function( w ) {
658				if ( !w.document ) {
659					throw new Error( "jQuery requires a window with a document" );
660				}
661				return factory( w );
662			};
663	} else {
664		factory( global );
665	}
666
667// Pass this if window is not defined yet
668}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
669
670// Support: Firefox 18+
671// Can't be in strict mode, several libs including ASP.NET trace
672// the stack via arguments.caller.callee and Firefox dies if
673// you try to trace through "use strict" call chains. (#13335)
674//"use strict";
675var deletedIds = [];
676
677var document = window.document;
678
679var slice = deletedIds.slice;
680
681var concat = deletedIds.concat;
682
683var push = deletedIds.push;
684
685var indexOf = deletedIds.indexOf;
686
687var class2type = {};
688
689var toString = class2type.toString;
690
691var hasOwn = class2type.hasOwnProperty;
692
693var support = {};
694
695
696
697var
698	version = "1.12.4",
699
700	// Define a local copy of jQuery
701	jQuery = function( selector, context ) {
702
703		// The jQuery object is actually just the init constructor 'enhanced'
704		// Need init if jQuery is called (just allow error to be thrown if not included)
705		return new jQuery.fn.init( selector, context );
706	},
707
708	// Support: Android<4.1, IE<9
709	// Make sure we trim BOM and NBSP
710	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
711
712	// Matches dashed string for camelizing
713	rmsPrefix = /^-ms-/,
714	rdashAlpha = /-([\da-z])/gi,
715
716	// Used by jQuery.camelCase as callback to replace()
717	fcamelCase = function( all, letter ) {
718		return letter.toUpperCase();
719	};
720
721jQuery.fn = jQuery.prototype = {
722
723	// The current version of jQuery being used
724	jquery: version,
725
726	constructor: jQuery,
727
728	// Start with an empty selector
729	selector: "",
730
731	// The default length of a jQuery object is 0
732	length: 0,
733
734	toArray: function() {
735		return slice.call( this );
736	},
737
738	// Get the Nth element in the matched element set OR
739	// Get the whole matched element set as a clean array
740	get: function( num ) {
741		return num != null ?
742
743			// Return just the one element from the set
744			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
745
746			// Return all the elements in a clean array
747			slice.call( this );
748	},
749
750	// Take an array of elements and push it onto the stack
751	// (returning the new matched element set)
752	pushStack: function( elems ) {
753
754		// Build a new jQuery matched element set
755		var ret = jQuery.merge( this.constructor(), elems );
756
757		// Add the old object onto the stack (as a reference)
758		ret.prevObject = this;
759		ret.context = this.context;
760
761		// Return the newly-formed element set
762		return ret;
763	},
764
765	// Execute a callback for every element in the matched set.
766	each: function( callback ) {
767		return jQuery.each( this, callback );
768	},
769
770	map: function( callback ) {
771		return this.pushStack( jQuery.map( this, function( elem, i ) {
772			return callback.call( elem, i, elem );
773		} ) );
774	},
775
776	slice: function() {
777		return this.pushStack( slice.apply( this, arguments ) );
778	},
779
780	first: function() {
781		return this.eq( 0 );
782	},
783
784	last: function() {
785		return this.eq( -1 );
786	},
787
788	eq: function( i ) {
789		var len = this.length,
790			j = +i + ( i < 0 ? len : 0 );
791		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
792	},
793
794	end: function() {
795		return this.prevObject || this.constructor();
796	},
797
798	// For internal use only.
799	// Behaves like an Array's method, not like a jQuery method.
800	push: push,
801	sort: deletedIds.sort,
802	splice: deletedIds.splice
803};
804
805jQuery.extend = jQuery.fn.extend = function() {
806	var src, copyIsArray, copy, name, options, clone,
807		target = arguments[ 0 ] || {},
808		i = 1,
809		length = arguments.length,
810		deep = false;
811
812	// Handle a deep copy situation
813	if ( typeof target === "boolean" ) {
814		deep = target;
815
816		// skip the boolean and the target
817		target = arguments[ i ] || {};
818		i++;
819	}
820
821	// Handle case when target is a string or something (possible in deep copy)
822	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
823		target = {};
824	}
825
826	// extend jQuery itself if only one argument is passed
827	if ( i === length ) {
828		target = this;
829		i--;
830	}
831
832	for ( ; i < length; i++ ) {
833
834		// Only deal with non-null/undefined values
835		if ( ( options = arguments[ i ] ) != null ) {
836
837			// Extend the base object
838			for ( name in options ) {
839				src = target[ name ];
840				copy = options[ name ];
841
842				// Prevent never-ending loop
843				if ( target === copy ) {
844					continue;
845				}
846
847				// Recurse if we're merging plain objects or arrays
848				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
849					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
850
851					if ( copyIsArray ) {
852						copyIsArray = false;
853						clone = src && jQuery.isArray( src ) ? src : [];
854
855					} else {
856						clone = src && jQuery.isPlainObject( src ) ? src : {};
857					}
858
859					// Never move original objects, clone them
860					target[ name ] = jQuery.extend( deep, clone, copy );
861
862				// Don't bring in undefined values
863				} else if ( copy !== undefined ) {
864					target[ name ] = copy;
865				}
866			}
867		}
868	}
869
870	// Return the modified object
871	return target;
872};
873
874jQuery.extend( {
875
876	// Unique for each copy of jQuery on the page
877	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
878
879	// Assume jQuery is ready without the ready module
880	isReady: true,
881
882	error: function( msg ) {
883		throw new Error( msg );
884	},
885
886	noop: function() {},
887
888	// See test/unit/core.js for details concerning isFunction.
889	// Since version 1.3, DOM methods and functions like alert
890	// aren't supported. They return false on IE (#2968).
891	isFunction: function( obj ) {
892		return jQuery.type( obj ) === "function";
893	},
894
895	isArray: Array.isArray || function( obj ) {
896		return jQuery.type( obj ) === "array";
897	},
898
899	isWindow: function( obj ) {
900		/* jshint eqeqeq: false */
901		return obj != null && obj == obj.window;
902	},
903
904	isNumeric: function( obj ) {
905
906		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
907		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
908		// subtraction forces infinities to NaN
909		// adding 1 corrects loss of precision from parseFloat (#15100)
910		var realStringObj = obj && obj.toString();
911		return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
912	},
913
914	isEmptyObject: function( obj ) {
915		var name;
916		for ( name in obj ) {
917			return false;
918		}
919		return true;
920	},
921
922	isPlainObject: function( obj ) {
923		var key;
924
925		// Must be an Object.
926		// Because of IE, we also have to check the presence of the constructor property.
927		// Make sure that DOM nodes and window objects don't pass through, as well
928		if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
929			return false;
930		}
931
932		try {
933
934			// Not own constructor property must be Object
935			if ( obj.constructor &&
936				!hasOwn.call( obj, "constructor" ) &&
937				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
938				return false;
939			}
940		} catch ( e ) {
941
942			// IE8,9 Will throw exceptions on certain host objects #9897
943			return false;
944		}
945
946		// Support: IE<9
947		// Handle iteration over inherited properties before own properties.
948		if ( !support.ownFirst ) {
949			for ( key in obj ) {
950				return hasOwn.call( obj, key );
951			}
952		}
953
954		// Own properties are enumerated firstly, so to speed up,
955		// if last one is own, then all properties are own.
956		for ( key in obj ) {}
957
958		return key === undefined || hasOwn.call( obj, key );
959	},
960
961	type: function( obj ) {
962		if ( obj == null ) {
963			return obj + "";
964		}
965		return typeof obj === "object" || typeof obj === "function" ?
966			class2type[ toString.call( obj ) ] || "object" :
967			typeof obj;
968	},
969
970	// Workarounds based on findings by Jim Driscoll
971	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
972	globalEval: function( data ) {
973		if ( data && jQuery.trim( data ) ) {
974
975			// We use execScript on Internet Explorer
976			// We use an anonymous function so that context is window
977			// rather than jQuery in Firefox
978			( window.execScript || function( data ) {
979				window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation
980			} )( data );
981		}
982	},
983
984	// Convert dashed to camelCase; used by the css and data modules
985	// Microsoft forgot to hump their vendor prefix (#9572)
986	camelCase: function( string ) {
987		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
988	},
989
990	nodeName: function( elem, name ) {
991		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
992	},
993
994	each: function( obj, callback ) {
995		var length, i = 0;
996
997		if ( isArrayLike( obj ) ) {
998			length = obj.length;
999			for ( ; i < length; i++ ) {
1000				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
1001					break;
1002				}
1003			}
1004		} else {
1005			for ( i in obj ) {
1006				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
1007					break;
1008				}
1009			}
1010		}
1011
1012		return obj;
1013	},
1014
1015	// Support: Android<4.1, IE<9
1016	trim: function( text ) {
1017		return text == null ?
1018			"" :
1019			( text + "" ).replace( rtrim, "" );
1020	},
1021
1022	// results is for internal usage only
1023	makeArray: function( arr, results ) {
1024		var ret = results || [];
1025
1026		if ( arr != null ) {
1027			if ( isArrayLike( Object( arr ) ) ) {
1028				jQuery.merge( ret,
1029					typeof arr === "string" ?
1030					[ arr ] : arr
1031				);
1032			} else {
1033				push.call( ret, arr );
1034			}
1035		}
1036
1037		return ret;
1038	},
1039
1040	inArray: function( elem, arr, i ) {
1041		var len;
1042
1043		if ( arr ) {
1044			if ( indexOf ) {
1045				return indexOf.call( arr, elem, i );
1046			}
1047
1048			len = arr.length;
1049			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
1050
1051			for ( ; i < len; i++ ) {
1052
1053				// Skip accessing in sparse arrays
1054				if ( i in arr && arr[ i ] === elem ) {
1055					return i;
1056				}
1057			}
1058		}
1059
1060		return -1;
1061	},
1062
1063	merge: function( first, second ) {
1064		var len = +second.length,
1065			j = 0,
1066			i = first.length;
1067
1068		while ( j < len ) {
1069			first[ i++ ] = second[ j++ ];
1070		}
1071
1072		// Support: IE<9
1073		// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
1074		if ( len !== len ) {
1075			while ( second[ j ] !== undefined ) {
1076				first[ i++ ] = second[ j++ ];
1077			}
1078		}
1079
1080		first.length = i;
1081
1082		return first;
1083	},
1084
1085	grep: function( elems, callback, invert ) {
1086		var callbackInverse,
1087			matches = [],
1088			i = 0,
1089			length = elems.length,
1090			callbackExpect = !invert;
1091
1092		// Go through the array, only saving the items
1093		// that pass the validator function
1094		for ( ; i < length; i++ ) {
1095			callbackInverse = !callback( elems[ i ], i );
1096			if ( callbackInverse !== callbackExpect ) {
1097				matches.push( elems[ i ] );
1098			}
1099		}
1100
1101		return matches;
1102	},
1103
1104	// arg is for internal usage only
1105	map: function( elems, callback, arg ) {
1106		var length, value,
1107			i = 0,
1108			ret = [];
1109
1110		// Go through the array, translating each of the items to their new values
1111		if ( isArrayLike( elems ) ) {
1112			length = elems.length;
1113			for ( ; i < length; i++ ) {
1114				value = callback( elems[ i ], i, arg );
1115
1116				if ( value != null ) {
1117					ret.push( value );
1118				}
1119			}
1120
1121		// Go through every key on the object,
1122		} else {
1123			for ( i in elems ) {
1124				value = callback( elems[ i ], i, arg );
1125
1126				if ( value != null ) {
1127					ret.push( value );
1128				}
1129			}
1130		}
1131
1132		// Flatten any nested arrays
1133		return concat.apply( [], ret );
1134	},
1135
1136	// A global GUID counter for objects
1137	guid: 1,
1138
1139	// Bind a function to a context, optionally partially applying any
1140	// arguments.
1141	proxy: function( fn, context ) {
1142		var args, proxy, tmp;
1143
1144		if ( typeof context === "string" ) {
1145			tmp = fn[ context ];
1146			context = fn;
1147			fn = tmp;
1148		}
1149
1150		// Quick check to determine if target is callable, in the spec
1151		// this throws a TypeError, but we will just return undefined.
1152		if ( !jQuery.isFunction( fn ) ) {
1153			return undefined;
1154		}
1155
1156		// Simulated bind
1157		args = slice.call( arguments, 2 );
1158		proxy = function() {
1159			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
1160		};
1161
1162		// Set the guid of unique handler to the same of original handler, so it can be removed
1163		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
1164
1165		return proxy;
1166	},
1167
1168	now: function() {
1169		return +( new Date() );
1170	},
1171
1172	// jQuery.support is not used in Core but other projects attach their
1173	// properties to it so it needs to exist.
1174	support: support
1175} );
1176
1177// JSHint would error on this code due to the Symbol not being defined in ES5.
1178// Defining this global in .jshintrc would create a danger of using the global
1179// unguarded in another place, it seems safer to just disable JSHint for these
1180// three lines.
1181/* jshint ignore: start */
1182if ( typeof Symbol === "function" ) {
1183	jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];
1184}
1185/* jshint ignore: end */
1186
1187// Populate the class2type map
1188jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
1189function( i, name ) {
1190	class2type[ "[object " + name + "]" ] = name.toLowerCase();
1191} );
1192
1193function isArrayLike( obj ) {
1194
1195	// Support: iOS 8.2 (not reproducible in simulator)
1196	// `in` check used to prevent JIT error (gh-2145)
1197	// hasOwn isn't used here due to false negatives
1198	// regarding Nodelist length in IE
1199	var length = !!obj && "length" in obj && obj.length,
1200		type = jQuery.type( obj );
1201
1202	if ( type === "function" || jQuery.isWindow( obj ) ) {
1203		return false;
vendor: 26,428 bytes, lines 1204-2128
1204	}
1205
1206	return type === "array" || length === 0 ||
1207		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
1208}
1209var Sizzle =
1210/*!
1211 * Sizzle CSS Selector Engine v2.2.1
1212 * http://sizzlejs.com/
1213 *
1214 * Copyright jQuery Foundation and other contributors
1215 * Released under the MIT license
1216 * http://jquery.org/license
1217 *
1218 * Date: 2015-10-17
1219 */
1220(function( window ) {
1221
1222var i,
1223	support,
1224	Expr,
1225	getText,
1226	isXML,
1227	tokenize,
1228	compile,
1229	select,
1230	outermostContext,
1231	sortInput,
1232	hasDuplicate,
1233
1234	// Local document vars
1235	setDocument,
1236	document,
1237	docElem,
1238	documentIsHTML,
1239	rbuggyQSA,
1240	rbuggyMatches,
1241	matches,
1242	contains,
1243
1244	// Instance-specific data
1245	expando = "sizzle" + 1 * new Date(),
1246	preferredDoc = window.document,
1247	dirruns = 0,
1248	done = 0,
1249	classCache = createCache(),
1250	tokenCache = createCache(),
1251	compilerCache = createCache(),
1252	sortOrder = function( a, b ) {
1253		if ( a === b ) {
1254			hasDuplicate = true;
1255		}
1256		return 0;
1257	},
1258
1259	// General-purpose constants
1260	MAX_NEGATIVE = 1 << 31,
1261
1262	// Instance methods
1263	hasOwn = ({}).hasOwnProperty,
1264	arr = [],
1265	pop = arr.pop,
1266	push_native = arr.push,
1267	push = arr.push,
1268	slice = arr.slice,
1269	// Use a stripped-down indexOf as it's faster than native
1270	// http://jsperf.com/thor-indexof-vs-for/5
1271	indexOf = function( list, elem ) {
1272		var i = 0,
1273			len = list.length;
1274		for ( ; i < len; i++ ) {
1275			if ( list[i] === elem ) {
1276				return i;
1277			}
1278		}
1279		return -1;
1280	},
1281
1282	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
1283
1284	// Regular expressions
1285
1286	// http://www.w3.org/TR/css3-selectors/#whitespace
1287	whitespace = "[\\x20\\t\\r\\n\\f]",
1288
1289	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
1290	identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
1291
1292	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
1293	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
1294		// Operator (capture 2)
1295		"*([*^$|!~]?=)" + whitespace +
1296		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
1297		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
1298		"*\\]",
1299
1300	pseudos = ":(" + identifier + ")(?:\\((" +
1301		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
1302		// 1. quoted (capture 3; capture 4 or capture 5)
1303		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
1304		// 2. simple (capture 6)
1305		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
1306		// 3. anything else (capture 2)
1307		".*" +
1308		")\\)|)",
1309
1310	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
1311	rwhitespace = new RegExp( whitespace + "+", "g" ),
1312	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
1313
1314	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
1315	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
1316
1317	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
1318
1319	rpseudo = new RegExp( pseudos ),
1320	ridentifier = new RegExp( "^" + identifier + "$" ),
1321
1322	matchExpr = {
1323		"ID": new RegExp( "^#(" + identifier + ")" ),
1324		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
1325		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
1326		"ATTR": new RegExp( "^" + attributes ),
1327		"PSEUDO": new RegExp( "^" + pseudos ),
1328		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
1329			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
1330			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
1331		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
1332		// For use in libraries implementing .is()
1333		// We use this for POS matching in `select`
1334		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
1335			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
1336	},
1337
1338	rinputs = /^(?:input|select|textarea|button)$/i,
1339	rheader = /^h\d$/i,
1340
1341	rnative = /^[^{]+\{\s*\[native \w/,
1342
1343	// Easily-parseable/retrievable ID or TAG or CLASS selectors
1344	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
1345
1346	rsibling = /[+~]/,
1347	rescape = /'|\\/g,
1348
1349	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
1350	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
1351	funescape = function( _, escaped, escapedWhitespace ) {
1352		var high = "0x" + escaped - 0x10000;
1353		// NaN means non-codepoint
1354		// Support: Firefox<24
1355		// Workaround erroneous numeric interpretation of +"0x"
1356		return high !== high || escapedWhitespace ?
1357			escaped :
1358			high < 0 ?
1359				// BMP codepoint
1360				String.fromCharCode( high + 0x10000 ) :
1361				// Supplemental Plane codepoint (surrogate pair)
1362				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
1363	},
1364
1365	// Used for iframes
1366	// See setDocument()
1367	// Removing the function wrapper causes a "Permission Denied"
1368	// error in IE
1369	unloadHandler = function() {
1370		setDocument();
1371	};
1372
1373// Optimize for push.apply( _, NodeList )
1374try {
1375	push.apply(
1376		(arr = slice.call( preferredDoc.childNodes )),
1377		preferredDoc.childNodes
1378	);
1379	// Support: Android<4.0
1380	// Detect silently failing push.apply
1381	arr[ preferredDoc.childNodes.length ].nodeType;
1382} catch ( e ) {
1383	push = { apply: arr.length ?
1384
1385		// Leverage slice if possible
1386		function( target, els ) {
1387			push_native.apply( target, slice.call(els) );
1388		} :
1389
1390		// Support: IE<9
1391		// Otherwise append directly
1392		function( target, els ) {
1393			var j = target.length,
1394				i = 0;
1395			// Can't trust NodeList.length
1396			while ( (target[j++] = els[i++]) ) {}
1397			target.length = j - 1;
1398		}
1399	};
1400}
1401
1402function Sizzle( selector, context, results, seed ) {
1403	var m, i, elem, nid, nidselect, match, groups, newSelector,
1404		newContext = context && context.ownerDocument,
1405
1406		// nodeType defaults to 9, since context defaults to document
1407		nodeType = context ? context.nodeType : 9;
1408
1409	results = results || [];
1410
1411	// Return early from calls with invalid selector or context
1412	if ( typeof selector !== "string" || !selector ||
1413		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
1414
1415		return results;
1416	}
1417
1418	// Try to shortcut find operations (as opposed to filters) in HTML documents
1419	if ( !seed ) {
1420
1421		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
1422			setDocument( context );
1423		}
1424		context = context || document;
1425
1426		if ( documentIsHTML ) {
1427
1428			// If the selector is sufficiently simple, try using a "get*By*" DOM method
1429			// (excepting DocumentFragment context, where the methods don't exist)
1430			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
1431
1432				// ID selector
1433				if ( (m = match[1]) ) {
1434
1435					// Document context
1436					if ( nodeType === 9 ) {
1437						if ( (elem = context.getElementById( m )) ) {
1438
1439							// Support: IE, Opera, Webkit
1440							// TODO: identify versions
1441							// getElementById can match elements by name instead of ID
1442							if ( elem.id === m ) {
1443								results.push( elem );
1444								return results;
1445							}
1446						} else {
1447							return results;
1448						}
1449
1450					// Element context
1451					} else {
1452
1453						// Support: IE, Opera, Webkit
1454						// TODO: identify versions
1455						// getElementById can match elements by name instead of ID
1456						if ( newContext && (elem = newContext.getElementById( m )) &&
1457							contains( context, elem ) &&
1458							elem.id === m ) {
1459
1460							results.push( elem );
1461							return results;
1462						}
1463					}
1464
1465				// Type selector
1466				} else if ( match[2] ) {
1467					push.apply( results, context.getElementsByTagName( selector ) );
1468					return results;
1469
1470				// Class selector
1471				} else if ( (m = match[3]) && support.getElementsByClassName &&
1472					context.getElementsByClassName ) {
1473
1474					push.apply( results, context.getElementsByClassName( m ) );
1475					return results;
1476				}
1477			}
1478
1479			// Take advantage of querySelectorAll
1480			if ( support.qsa &&
1481				!compilerCache[ selector + " " ] &&
1482				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
1483
1484				if ( nodeType !== 1 ) {
1485					newContext = context;
1486					newSelector = selector;
1487
1488				// qSA looks outside Element context, which is not what we want
1489				// Thanks to Andrew Dupont for this workaround technique
1490				// Support: IE <=8
1491				// Exclude object elements
1492				} else if ( context.nodeName.toLowerCase() !== "object" ) {
1493
1494					// Capture the context ID, setting it first if necessary
1495					if ( (nid = context.getAttribute( "id" )) ) {
1496						nid = nid.replace( rescape, "\\$&" );
1497					} else {
1498						context.setAttribute( "id", (nid = expando) );
1499					}
1500
1501					// Prefix every selector in the list
1502					groups = tokenize( selector );
1503					i = groups.length;
1504					nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
1505					while ( i-- ) {
1506						groups[i] = nidselect + " " + toSelector( groups[i] );
1507					}
1508					newSelector = groups.join( "," );
1509
1510					// Expand context for sibling selectors
1511					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
1512						context;
1513				}
1514
1515				if ( newSelector ) {
1516					try {
1517						push.apply( results,
1518							newContext.querySelectorAll( newSelector )
1519						);
1520						return results;
1521					} catch ( qsaError ) {
1522					} finally {
1523						if ( nid === expando ) {
1524							context.removeAttribute( "id" );
1525						}
1526					}
1527				}
1528			}
1529		}
1530	}
1531
1532	// All others
1533	return select( selector.replace( rtrim, "$1" ), context, results, seed );
1534}
1535
1536/**
1537 * Create key-value caches of limited size
1538 * @returns {function(string, object)} Returns the Object data after storing it on itself with
1539 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
1540 *	deleting the oldest entry
1541 */
1542function createCache() {
1543	var keys = [];
1544
1545	function cache( key, value ) {
1546		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
1547		if ( keys.push( key + " " ) > Expr.cacheLength ) {
1548			// Only keep the most recent entries
1549			delete cache[ keys.shift() ];
1550		}
1551		return (cache[ key + " " ] = value);
1552	}
1553	return cache;
1554}
1555
1556/**
1557 * Mark a function for special use by Sizzle
1558 * @param {Function} fn The function to mark
1559 */
1560function markFunction( fn ) {
1561	fn[ expando ] = true;
1562	return fn;
1563}
1564
1565/**
1566 * Support testing using an element
1567 * @param {Function} fn Passed the created div and expects a boolean result
1568 */
1569function assert( fn ) {
1570	var div = document.createElement("div");
1571
1572	try {
1573		return !!fn( div );
1574	} catch (e) {
1575		return false;
1576	} finally {
1577		// Remove from its parent by default
1578		if ( div.parentNode ) {
1579			div.parentNode.removeChild( div );
1580		}
1581		// release memory in IE
1582		div = null;
1583	}
1584}
1585
1586/**
1587 * Adds the same handler for all of the specified attrs
1588 * @param {String} attrs Pipe-separated list of attributes
1589 * @param {Function} handler The method that will be applied
1590 */
1591function addHandle( attrs, handler ) {
1592	var arr = attrs.split("|"),
1593		i = arr.length;
1594
1595	while ( i-- ) {
1596		Expr.attrHandle[ arr[i] ] = handler;
1597	}
1598}
1599
1600/**
1601 * Checks document order of two siblings
1602 * @param {Element} a
1603 * @param {Element} b
1604 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
1605 */
1606function siblingCheck( a, b ) {
1607	var cur = b && a,
1608		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
1609			( ~b.sourceIndex || MAX_NEGATIVE ) -
1610			( ~a.sourceIndex || MAX_NEGATIVE );
1611
1612	// Use IE sourceIndex if available on both nodes
1613	if ( diff ) {
1614		return diff;
1615	}
1616
1617	// Check if b follows a
1618	if ( cur ) {
1619		while ( (cur = cur.nextSibling) ) {
1620			if ( cur === b ) {
1621				return -1;
1622			}
1623		}
1624	}
1625
1626	return a ? 1 : -1;
1627}
1628
1629/**
1630 * Returns a function to use in pseudos for input types
1631 * @param {String} type
1632 */
1633function createInputPseudo( type ) {
1634	return function( elem ) {
1635		var name = elem.nodeName.toLowerCase();
1636		return name === "input" && elem.type === type;
1637	};
1638}
1639
1640/**
1641 * Returns a function to use in pseudos for buttons
1642 * @param {String} type
1643 */
1644function createButtonPseudo( type ) {
1645	return function( elem ) {
1646		var name = elem.nodeName.toLowerCase();
1647		return (name === "input" || name === "button") && elem.type === type;
1648	};
1649}
1650
1651/**
1652 * Returns a function to use in pseudos for positionals
1653 * @param {Function} fn
1654 */
1655function createPositionalPseudo( fn ) {
1656	return markFunction(function( argument ) {
1657		argument = +argument;
1658		return markFunction(function( seed, matches ) {
1659			var j,
1660				matchIndexes = fn( [], seed.length, argument ),
1661				i = matchIndexes.length;
1662
1663			// Match elements found at the specified indexes
1664			while ( i-- ) {
1665				if ( seed[ (j = matchIndexes[i]) ] ) {
1666					seed[j] = !(matches[j] = seed[j]);
1667				}
1668			}
1669		});
1670	});
1671}
1672
1673/**
1674 * Checks a node for validity as a Sizzle context
1675 * @param {Element|Object=} context
1676 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1677 */
1678function testContext( context ) {
1679	return context && typeof context.getElementsByTagName !== "undefined" && context;
1680}
1681
1682// Expose support vars for convenience
1683support = Sizzle.support = {};
1684
1685/**
1686 * Detects XML nodes
1687 * @param {Element|Object} elem An element or a document
1688 * @returns {Boolean} True iff elem is a non-HTML XML node
1689 */
1690isXML = Sizzle.isXML = function( elem ) {
1691	// documentElement is verified for cases where it doesn't yet exist
1692	// (such as loading iframes in IE - #4833)
1693	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
1694	return documentElement ? documentElement.nodeName !== "HTML" : false;
1695};
1696
1697/**
1698 * Sets document-related variables once based on the current document
1699 * @param {Element|Object} [doc] An element or document object to use to set the document
1700 * @returns {Object} Returns the current document
1701 */
1702setDocument = Sizzle.setDocument = function( node ) {
1703	var hasCompare, parent,
1704		doc = node ? node.ownerDocument || node : preferredDoc;
1705
1706	// Return early if doc is invalid or already selected
1707	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
1708		return document;
1709	}
1710
1711	// Update global variables
1712	document = doc;
1713	docElem = document.documentElement;
1714	documentIsHTML = !isXML( document );
1715
1716	// Support: IE 9-11, Edge
1717	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
1718	if ( (parent = document.defaultView) && parent.top !== parent ) {
1719		// Support: IE 11
1720		if ( parent.addEventListener ) {
1721			parent.addEventListener( "unload", unloadHandler, false );
1722
1723		// Support: IE 9 - 10 only
1724		} else if ( parent.attachEvent ) {
1725			parent.attachEvent( "onunload", unloadHandler );
1726		}
1727	}
1728
1729	/* Attributes
1730	---------------------------------------------------------------------- */
1731
1732	// Support: IE<8
1733	// Verify that getAttribute really returns attributes and not properties
1734	// (excepting IE8 booleans)
1735	support.attributes = assert(function( div ) {
1736		div.className = "i";
1737		return !div.getAttribute("className");
1738	});
1739
1740	/* getElement(s)By*
1741	---------------------------------------------------------------------- */
1742
1743	// Check if getElementsByTagName("*") returns only elements
1744	support.getElementsByTagName = assert(function( div ) {
1745		div.appendChild( document.createComment("") );
1746		return !div.getElementsByTagName("*").length;
1747	});
1748
1749	// Support: IE<9
1750	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
1751
1752	// Support: IE<10
1753	// Check if getElementById returns elements by name
1754	// The broken getElementById methods don't pick up programatically-set names,
1755	// so use a roundabout getElementsByName test
1756	support.getById = assert(function( div ) {
1757		docElem.appendChild( div ).id = expando;
1758		return !document.getElementsByName || !document.getElementsByName( expando ).length;
1759	});
1760
1761	// ID find and filter
1762	if ( support.getById ) {
1763		Expr.find["ID"] = function( id, context ) {
1764			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1765				var m = context.getElementById( id );
1766				return m ? [ m ] : [];
1767			}
1768		};
1769		Expr.filter["ID"] = function( id ) {
1770			var attrId = id.replace( runescape, funescape );
1771			return function( elem ) {
1772				return elem.getAttribute("id") === attrId;
1773			};
1774		};
1775	} else {
1776		// Support: IE6/7
1777		// getElementById is not reliable as a find shortcut
1778		delete Expr.find["ID"];
1779
1780		Expr.filter["ID"] =  function( id ) {
1781			var attrId = id.replace( runescape, funescape );
1782			return function( elem ) {
1783				var node = typeof elem.getAttributeNode !== "undefined" &&
1784					elem.getAttributeNode("id");
1785				return node && node.value === attrId;
1786			};
1787		};
1788	}
1789
1790	// Tag
1791	Expr.find["TAG"] = support.getElementsByTagName ?
1792		function( tag, context ) {
1793			if ( typeof context.getElementsByTagName !== "undefined" ) {
1794				return context.getElementsByTagName( tag );
1795
1796			// DocumentFragment nodes don't have gEBTN
1797			} else if ( support.qsa ) {
1798				return context.querySelectorAll( tag );
1799			}
1800		} :
1801
1802		function( tag, context ) {
1803			var elem,
1804				tmp = [],
1805				i = 0,
1806				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
1807				results = context.getElementsByTagName( tag );
1808
1809			// Filter out possible comments
1810			if ( tag === "*" ) {
1811				while ( (elem = results[i++]) ) {
1812					if ( elem.nodeType === 1 ) {
1813						tmp.push( elem );
1814					}
1815				}
1816
1817				return tmp;
1818			}
1819			return results;
1820		};
1821
1822	// Class
1823	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
1824		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
1825			return context.getElementsByClassName( className );
1826		}
1827	};
1828
1829	/* QSA/matchesSelector
1830	---------------------------------------------------------------------- */
1831
1832	// QSA and matchesSelector support
1833
1834	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
1835	rbuggyMatches = [];
1836
1837	// qSa(:focus) reports false when true (Chrome 21)
1838	// We allow this because of a bug in IE8/9 that throws an error
1839	// whenever `document.activeElement` is accessed on an iframe
1840	// So, we allow :focus to pass through QSA all the time to avoid the IE error
1841	// See http://bugs.jquery.com/ticket/13378
1842	rbuggyQSA = [];
1843
1844	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
1845		// Build QSA regex
1846		// Regex strategy adopted from Diego Perini
1847		assert(function( div ) {
1848			// Select is set to empty string on purpose
1849			// This is to test IE's treatment of not explicitly
1850			// setting a boolean content attribute,
1851			// since its presence should be enough
1852			// http://bugs.jquery.com/ticket/12359
1853			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
1854				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
1855				"<option selected=''></option></select>";
1856
1857			// Support: IE8, Opera 11-12.16
1858			// Nothing should be selected when empty strings follow ^= or $= or *=
1859			// The test attribute must be unknown in Opera but "safe" for WinRT
1860			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
1861			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
1862				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
1863			}
1864
1865			// Support: IE8
1866			// Boolean attributes and "value" are not treated correctly
1867			if ( !div.querySelectorAll("[selected]").length ) {
1868				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1869			}
1870
1871			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
1872			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1873				rbuggyQSA.push("~=");
1874			}
1875
1876			// Webkit/Opera - :checked should return selected option elements
1877			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1878			// IE8 throws error here and will not see later tests
1879			if ( !div.querySelectorAll(":checked").length ) {
1880				rbuggyQSA.push(":checked");
1881			}
1882
1883			// Support: Safari 8+, iOS 8+
1884			// https://bugs.webkit.org/show_bug.cgi?id=136851
1885			// In-page `selector#id sibing-combinator selector` fails
1886			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
1887				rbuggyQSA.push(".#.+[+~]");
1888			}
1889		});
1890
1891		assert(function( div ) {
1892			// Support: Windows 8 Native Apps
1893			// The type and name attributes are restricted during .innerHTML assignment
1894			var input = document.createElement("input");
1895			input.setAttribute( "type", "hidden" );
1896			div.appendChild( input ).setAttribute( "name", "D" );
1897
1898			// Support: IE8
1899			// Enforce case-sensitivity of name attribute
1900			if ( div.querySelectorAll("[name=d]").length ) {
1901				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
1902			}
1903
1904			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
1905			// IE8 throws error here and will not see later tests
1906			if ( !div.querySelectorAll(":enabled").length ) {
1907				rbuggyQSA.push( ":enabled", ":disabled" );
1908			}
1909
1910			// Opera 10-11 does not throw on post-comma invalid pseudos
1911			div.querySelectorAll("*,:x");
1912			rbuggyQSA.push(",.*:");
1913		});
1914	}
1915
1916	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
1917		docElem.webkitMatchesSelector ||
1918		docElem.mozMatchesSelector ||
1919		docElem.oMatchesSelector ||
1920		docElem.msMatchesSelector) )) ) {
1921
1922		assert(function( div ) {
1923			// Check to see if it's possible to do matchesSelector
1924			// on a disconnected node (IE 9)
1925			support.disconnectedMatch = matches.call( div, "div" );
1926
1927			// This should fail with an exception
1928			// Gecko does not error, returns false instead
1929			matches.call( div, "[s!='']:x" );
1930			rbuggyMatches.push( "!=", pseudos );
1931		});
1932	}
1933
1934	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
1935	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
1936
1937	/* Contains
1938	---------------------------------------------------------------------- */
1939	hasCompare = rnative.test( docElem.compareDocumentPosition );
1940
1941	// Element contains another
1942	// Purposefully self-exclusive
1943	// As in, an element does not contain itself
1944	contains = hasCompare || rnative.test( docElem.contains ) ?
1945		function( a, b ) {
1946			var adown = a.nodeType === 9 ? a.documentElement : a,
1947				bup = b && b.parentNode;
1948			return a === bup || !!( bup && bup.nodeType === 1 && (
1949				adown.contains ?
1950					adown.contains( bup ) :
1951					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1952			));
1953		} :
1954		function( a, b ) {
1955			if ( b ) {
1956				while ( (b = b.parentNode) ) {
1957					if ( b === a ) {
1958						return true;
1959					}
1960				}
1961			}
1962			return false;
1963		};
1964
1965	/* Sorting
1966	---------------------------------------------------------------------- */
1967
1968	// Document order sorting
1969	sortOrder = hasCompare ?
1970	function( a, b ) {
1971
1972		// Flag for duplicate removal
1973		if ( a === b ) {
1974			hasDuplicate = true;
1975			return 0;
1976		}
1977
1978		// Sort on method existence if only one input has compareDocumentPosition
1979		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
1980		if ( compare ) {
1981			return compare;
1982		}
1983
1984		// Calculate position if both inputs belong to the same document
1985		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
1986			a.compareDocumentPosition( b ) :
1987
1988			// Otherwise we know they are disconnected
1989			1;
1990
1991		// Disconnected nodes
1992		if ( compare & 1 ||
1993			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
1994
1995			// Choose the first element that is related to our preferred document
1996			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
1997				return -1;
1998			}
1999			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
2000				return 1;
2001			}
2002
2003			// Maintain original order
2004			return sortInput ?
2005				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
2006				0;
2007		}
2008
2009		return compare & 4 ? -1 : 1;
2010	} :
2011	function( a, b ) {
2012		// Exit early if the nodes are identical
2013		if ( a === b ) {
2014			hasDuplicate = true;
2015			return 0;
2016		}
2017
2018		var cur,
2019			i = 0,
2020			aup = a.parentNode,
2021			bup = b.parentNode,
2022			ap = [ a ],
2023			bp = [ b ];
2024
2025		// Parentless nodes are either documents or disconnected
2026		if ( !aup || !bup ) {
2027			return a === document ? -1 :
2028				b === document ? 1 :
2029				aup ? -1 :
2030				bup ? 1 :
2031				sortInput ?
2032				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
2033				0;
2034
2035		// If the nodes are siblings, we can do a quick check
2036		} else if ( aup === bup ) {
2037			return siblingCheck( a, b );
2038		}
2039
2040		// Otherwise we need full lists of their ancestors for comparison
2041		cur = a;
2042		while ( (cur = cur.parentNode) ) {
2043			ap.unshift( cur );
2044		}
2045		cur = b;
2046		while ( (cur = cur.parentNode) ) {
2047			bp.unshift( cur );
2048		}
2049
2050		// Walk down the tree looking for a discrepancy
2051		while ( ap[i] === bp[i] ) {
2052			i++;
2053		}
2054
2055		return i ?
2056			// Do a sibling check if the nodes have a common ancestor
2057			siblingCheck( ap[i], bp[i] ) :
2058
2059			// Otherwise nodes in our document sort first
2060			ap[i] === preferredDoc ? -1 :
2061			bp[i] === preferredDoc ? 1 :
2062			0;
2063	};
2064
2065	return document;
2066};
2067
2068Sizzle.matches = function( expr, elements ) {
2069	return Sizzle( expr, null, null, elements );
2070};
2071
2072Sizzle.matchesSelector = function( elem, expr ) {
2073	// Set document vars if needed
2074	if ( ( elem.ownerDocument || elem ) !== document ) {
2075		setDocument( elem );
2076	}
2077
2078	// Make sure that attribute selectors are quoted
2079	expr = expr.replace( rattributeQuotes, "='$1']" );
2080
2081	if ( support.matchesSelector && documentIsHTML &&
2082		!compilerCache[ expr + " " ] &&
2083		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
2084		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
2085
2086		try {
2087			var ret = matches.call( elem, expr );
2088
2089			// IE 9's matchesSelector returns false on disconnected nodes
2090			if ( ret || support.disconnectedMatch ||
2091					// As well, disconnected nodes are said to be in a document
2092					// fragment in IE 9
2093					elem.document && elem.document.nodeType !== 11 ) {
2094				return ret;
2095			}
2096		} catch (e) {}
2097	}
2098
2099	return Sizzle( expr, document, null, [ elem ] ).length > 0;
2100};
2101
2102Sizzle.contains = function( context, elem ) {
2103	// Set document vars if needed
2104	if ( ( context.ownerDocument || context ) !== document ) {
2105		setDocument( context );
2106	}
2107	return contains( context, elem );
2108};
2109
2110Sizzle.attr = function( elem, name ) {
2111	// Set document vars if needed
2112	if ( ( elem.ownerDocument || elem ) !== document ) {
2113		setDocument( elem );
2114	}
2115
2116	var fn = Expr.attrHandle[ name.toLowerCase() ],
2117		// Don't get fooled by Object.prototype properties (jQuery #13807)
2118		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
2119			fn( elem, name, !documentIsHTML ) :
2120			undefined;
2121
2122	return val !== undefined ?
2123		val :
2124		support.attributes || !documentIsHTML ?
2125			elem.getAttribute( name ) :
2126			(val = elem.getAttributeNode(name)) && val.specified ?
2127				val.value :
2128				null
vendor: 13,569 bytes, lines 2128-2598
2128;
2129};
2130
2131Sizzle.error = function( msg ) {
2132	throw new Error( "Syntax error, unrecognized expression: " + msg );
2133};
2134
2135/**
2136 * Document sorting and removing duplicates
2137 * @param {ArrayLike} results
2138 */
2139Sizzle.uniqueSort = function( results ) {
2140	var elem,
2141		duplicates = [],
2142		j = 0,
2143		i = 0;
2144
2145	// Unless we *know* we can detect duplicates, assume their presence
2146	hasDuplicate = !support.detectDuplicates;
2147	sortInput = !support.sortStable && results.slice( 0 );
2148	results.sort( sortOrder );
2149
2150	if ( hasDuplicate ) {
2151		while ( (elem = results[i++]) ) {
2152			if ( elem === results[ i ] ) {
2153				j = duplicates.push( i );
2154			}
2155		}
2156		while ( j-- ) {
2157			results.splice( duplicates[ j ], 1 );
2158		}
2159	}
2160
2161	// Clear input after sorting to release objects
2162	// See https://github.com/jquery/sizzle/pull/225
2163	sortInput = null;
2164
2165	return results;
2166};
2167
2168/**
2169 * Utility function for retrieving the text value of an array of DOM nodes
2170 * @param {Array|Element} elem
2171 */
2172getText = Sizzle.getText = function( elem ) {
2173	var node,
2174		ret = "",
2175		i = 0,
2176		nodeType = elem.nodeType;
2177
2178	if ( !nodeType ) {
2179		// If no nodeType, this is expected to be an array
2180		while ( (node = elem[i++]) ) {
2181			// Do not traverse comment nodes
2182			ret += getText( node );
2183		}
2184	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
2185		// Use textContent for elements
2186		// innerText usage removed for consistency of new lines (jQuery #11153)
2187		if ( typeof elem.textContent === "string" ) {
2188			return elem.textContent;
2189		} else {
2190			// Traverse its children
2191			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
2192				ret += getText( elem );
2193			}
2194		}
2195	} else if ( nodeType === 3 || nodeType === 4 ) {
2196		return elem.nodeValue;
2197	}
2198	// Do not include comment or processing instruction nodes
2199
2200	return ret;
2201};
2202
2203Expr = Sizzle.selectors = {
2204
2205	// Can be adjusted by the user
2206	cacheLength: 50,
2207
2208	createPseudo: markFunction,
2209
2210	match: matchExpr,
2211
2212	attrHandle: {},
2213
2214	find: {},
2215
2216	relative: {
2217		">": { dir: "parentNode", first: true },
2218		" ": { dir: "parentNode" },
2219		"+": { dir: "previousSibling", first: true },
2220		"~": { dir: "previousSibling" }
2221	},
2222
2223	preFilter: {
2224		"ATTR": function( match ) {
2225			match[1] = match[1].replace( runescape, funescape );
2226
2227			// Move the given value to match[3] whether quoted or unquoted
2228			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
2229
2230			if ( match[2] === "~=" ) {
2231				match[3] = " " + match[3] + " ";
2232			}
2233
2234			return match.slice( 0, 4 );
2235		},
2236
2237		"CHILD": function( match ) {
2238			/* matches from matchExpr["CHILD"]
2239				1 type (only|nth|...)
2240				2 what (child|of-type)
2241				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
2242				4 xn-component of xn+y argument ([+-]?\d*n|)
2243				5 sign of xn-component
2244				6 x of xn-component
2245				7 sign of y-component
2246				8 y of y-component
2247			*/
2248			match[1] = match[1].toLowerCase();
2249
2250			if ( match[1].slice( 0, 3 ) === "nth" ) {
2251				// nth-* requires argument
2252				if ( !match[3] ) {
2253					Sizzle.error( match[0] );
2254				}
2255
2256				// numeric x and y parameters for Expr.filter.CHILD
2257				// remember that false/true cast respectively to 0/1
2258				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
2259				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
2260
2261			// other types prohibit arguments
2262			} else if ( match[3] ) {
2263				Sizzle.error( match[0] );
2264			}
2265
2266			return match;
2267		},
2268
2269		"PSEUDO": function( match ) {
2270			var excess,
2271				unquoted = !match[6] && match[2];
2272
2273			if ( matchExpr["CHILD"].test( match[0] ) ) {
2274				return null;
2275			}
2276
2277			// Accept quoted arguments as-is
2278			if ( match[3] ) {
2279				match[2] = match[4] || match[5] || "";
2280
2281			// Strip excess characters from unquoted arguments
2282			} else if ( unquoted && rpseudo.test( unquoted ) &&
2283				// Get excess from tokenize (recursively)
2284				(excess = tokenize( unquoted, true )) &&
2285				// advance to the next closing parenthesis
2286				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
2287
2288				// excess is a negative index
2289				match[0] = match[0].slice( 0, excess );
2290				match[2] = unquoted.slice( 0, excess );
2291			}
2292
2293			// Return only captures needed by the pseudo filter method (type and argument)
2294			return match.slice( 0, 3 );
2295		}
2296	},
2297
2298	filter: {
2299
2300		"TAG": function( nodeNameSelector ) {
2301			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
2302			return nodeNameSelector === "*" ?
2303				function() { return true; } :
2304				function( elem ) {
2305					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
2306				};
2307		},
2308
2309		"CLASS": function( className ) {
2310			var pattern = classCache[ className + " " ];
2311
2312			return pattern ||
2313				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
2314				classCache( className, function( elem ) {
2315					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
2316				});
2317		},
2318
2319		"ATTR": function( name, operator, check ) {
2320			return function( elem ) {
2321				var result = Sizzle.attr( elem, name );
2322
2323				if ( result == null ) {
2324					return operator === "!=";
2325				}
2326				if ( !operator ) {
2327					return true;
2328				}
2329
2330				result += "";
2331
2332				return operator === "=" ? result === check :
2333					operator === "!=" ? result !== check :
2334					operator === "^=" ? check && result.indexOf( check ) === 0 :
2335					operator === "*=" ? check && result.indexOf( check ) > -1 :
2336					operator === "$=" ? check && result.slice( -check.length ) === check :
2337					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
2338					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
2339					false;
2340			};
2341		},
2342
2343		"CHILD": function( type, what, argument, first, last ) {
2344			var simple = type.slice( 0, 3 ) !== "nth",
2345				forward = type.slice( -4 ) !== "last",
2346				ofType = what === "of-type";
2347
2348			return first === 1 && last === 0 ?
2349
2350				// Shortcut for :nth-*(n)
2351				function( elem ) {
2352					return !!elem.parentNode;
2353				} :
2354
2355				function( elem, context, xml ) {
2356					var cache, uniqueCache, outerCache, node, nodeIndex, start,
2357						dir = simple !== forward ? "nextSibling" : "previousSibling",
2358						parent = elem.parentNode,
2359						name = ofType && elem.nodeName.toLowerCase(),
2360						useCache = !xml && !ofType,
2361						diff = false;
2362
2363					if ( parent ) {
2364
2365						// :(first|last|only)-(child|of-type)
2366						if ( simple ) {
2367							while ( dir ) {
2368								node = elem;
2369								while ( (node = node[ dir ]) ) {
2370									if ( ofType ?
2371										node.nodeName.toLowerCase() === name :
2372										node.nodeType === 1 ) {
2373
2374										return false;
2375									}
2376								}
2377								// Reverse direction for :only-* (if we haven't yet done so)
2378								start = dir = type === "only" && !start && "nextSibling";
2379							}
2380							return true;
2381						}
2382
2383						start = [ forward ? parent.firstChild : parent.lastChild ];
2384
2385						// non-xml :nth-child(...) stores cache data on `parent`
2386						if ( forward && useCache ) {
2387
2388							// Seek `elem` from a previously-cached index
2389
2390							// ...in a gzip-friendly way
2391							node = parent;
2392							outerCache = node[ expando ] || (node[ expando ] = {});
2393
2394							// Support: IE <9 only
2395							// Defend against cloned attroperties (jQuery gh-1709)
2396							uniqueCache = outerCache[ node.uniqueID ] ||
2397								(outerCache[ node.uniqueID ] = {});
2398
2399							cache = uniqueCache[ type ] || [];
2400							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
2401							diff = nodeIndex && cache[ 2 ];
2402							node = nodeIndex && parent.childNodes[ nodeIndex ];
2403
2404							while ( (node = ++nodeIndex && node && node[ dir ] ||
2405
2406								// Fallback to seeking `elem` from the start
2407								(diff = nodeIndex = 0) || start.pop()) ) {
2408
2409								// When found, cache indexes on `parent` and break
2410								if ( node.nodeType === 1 && ++diff && node === elem ) {
2411									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
2412									break;
2413								}
2414							}
2415
2416						} else {
2417							// Use previously-cached element index if available
2418							if ( useCache ) {
2419								// ...in a gzip-friendly way
2420								node = elem;
2421								outerCache = node[ expando ] || (node[ expando ] = {});
2422
2423								// Support: IE <9 only
2424								// Defend against cloned attroperties (jQuery gh-1709)
2425								uniqueCache = outerCache[ node.uniqueID ] ||
2426									(outerCache[ node.uniqueID ] = {});
2427
2428								cache = uniqueCache[ type ] || [];
2429								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
2430								diff = nodeIndex;
2431							}
2432
2433							// xml :nth-child(...)
2434							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
2435							if ( diff === false ) {
2436								// Use the same loop as above to seek `elem` from the start
2437								while ( (node = ++nodeIndex && node && node[ dir ] ||
2438									(diff = nodeIndex = 0) || start.pop()) ) {
2439
2440									if ( ( ofType ?
2441										node.nodeName.toLowerCase() === name :
2442										node.nodeType === 1 ) &&
2443										++diff ) {
2444
2445										// Cache the index of each encountered element
2446										if ( useCache ) {
2447											outerCache = node[ expando ] || (node[ expando ] = {});
2448
2449											// Support: IE <9 only
2450											// Defend against cloned attroperties (jQuery gh-1709)
2451											uniqueCache = outerCache[ node.uniqueID ] ||
2452												(outerCache[ node.uniqueID ] = {});
2453
2454											uniqueCache[ type ] = [ dirruns, diff ];
2455										}
2456
2457										if ( node === elem ) {
2458											break;
2459										}
2460									}
2461								}
2462							}
2463						}
2464
2465						// Incorporate the offset, then check against cycle size
2466						diff -= last;
2467						return diff === first || ( diff % first === 0 && diff / first >= 0 );
2468					}
2469				};
2470		},
2471
2472		"PSEUDO": function( pseudo, argument ) {
2473			// pseudo-class names are case-insensitive
2474			// http://www.w3.org/TR/selectors/#pseudo-classes
2475			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
2476			// Remember that setFilters inherits from pseudos
2477			var args,
2478				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
2479					Sizzle.error( "unsupported pseudo: " + pseudo );
2480
2481			// The user may use createPseudo to indicate that
2482			// arguments are needed to create the filter function
2483			// just as Sizzle does
2484			if ( fn[ expando ] ) {
2485				return fn( argument );
2486			}
2487
2488			// But maintain support for old signatures
2489			if ( fn.length > 1 ) {
2490				args = [ pseudo, pseudo, "", argument ];
2491				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
2492					markFunction(function( seed, matches ) {
2493						var idx,
2494							matched = fn( seed, argument ),
2495							i = matched.length;
2496						while ( i-- ) {
2497							idx = indexOf( seed, matched[i] );
2498							seed[ idx ] = !( matches[ idx ] = matched[i] );
2499						}
2500					}) :
2501					function( elem ) {
2502						return fn( elem, 0, args );
2503					};
2504			}
2505
2506			return fn;
2507		}
2508	},
2509
2510	pseudos: {
2511		// Potentially complex pseudos
2512		"not": markFunction(function( selector ) {
2513			// Trim the selector passed to compile
2514			// to avoid treating leading and trailing
2515			// spaces as combinators
2516			var input = [],
2517				results = [],
2518				matcher = compile( selector.replace( rtrim, "$1" ) );
2519
2520			return matcher[ expando ] ?
2521				markFunction(function( seed, matches, context, xml ) {
2522					var elem,
2523						unmatched = matcher( seed, null, xml, [] ),
2524						i = seed.length;
2525
2526					// Match elements unmatched by `matcher`
2527					while ( i-- ) {
2528						if ( (elem = unmatched[i]) ) {
2529							seed[i] = !(matches[i] = elem);
2530						}
2531					}
2532				}) :
2533				function( elem, context, xml ) {
2534					input[0] = elem;
2535					matcher( input, null, xml, results );
2536					// Don't keep the element (issue #299)
2537					input[0] = null;
2538					return !results.pop();
2539				};
2540		}),
2541
2542		"has": markFunction(function( selector ) {
2543			return function( elem ) {
2544				return Sizzle( selector, elem ).length > 0;
2545			};
2546		}),
2547
2548		"contains": markFunction(function( text ) {
2549			text = text.replace( runescape, funescape );
2550			return function( elem ) {
2551				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
2552			};
2553		}),
2554
2555		// "Whether an element is represented by a :lang() selector
2556		// is based solely on the element's language value
2557		// being equal to the identifier C,
2558		// or beginning with the identifier C immediately followed by "-".
2559		// The matching of C against the element's language value is performed case-insensitively.
2560		// The identifier C does not have to be a valid language name."
2561		// http://www.w3.org/TR/selectors/#lang-pseudo
2562		"lang": markFunction( function( lang ) {
2563			// lang value must be a valid identifier
2564			if ( !ridentifier.test(lang || "") ) {
2565				Sizzle.error( "unsupported lang: " + lang );
2566			}
2567			lang = lang.replace( runescape, funescape ).toLowerCase();
2568			return function( elem ) {
2569				var elemLang;
2570				do {
2571					if ( (elemLang = documentIsHTML ?
2572						elem.lang :
2573						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
2574
2575						elemLang = elemLang.toLowerCase();
2576						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
2577					}
2578				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
2579				return false;
2580			};
2581		}),
2582
2583		// Miscellaneous
2584		"target": function( elem ) {
2585			var hash = window.location && window.location.hash;
2586			return hash && hash.slice( 1 ) === elem.id;
2587		},
2588
2589		"root": function( elem ) {
2590			return elem === docElem;
2591		},
2592
2593		"focus": function( elem ) {
2594			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
2595		},
2596
2597		// Boolean properties
2598		"enabled": 
vendor: 6,738 bytes, lines 2598-2849
2598function( elem ) {
2599			return elem.disabled === false;
2600		},
2601
2602		"disabled": function( elem ) {
2603			return elem.disabled === true;
2604		},
2605
2606		"checked": function( elem ) {
2607			// In CSS3, :checked should return both checked and selected elements
2608			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2609			var nodeName = elem.nodeName.toLowerCase();
2610			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
2611		},
2612
2613		"selected": function( elem ) {
2614			// Accessing this property makes selected-by-default
2615			// options in Safari work properly
2616			if ( elem.parentNode ) {
2617				elem.parentNode.selectedIndex;
2618			}
2619
2620			return elem.selected === true;
2621		},
2622
2623		// Contents
2624		"empty": function( elem ) {
2625			// http://www.w3.org/TR/selectors/#empty-pseudo
2626			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2627			//   but not by others (comment: 8; processing instruction: 7; etc.)
2628			// nodeType < 6 works because attributes (2) do not appear as children
2629			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
2630				if ( elem.nodeType < 6 ) {
2631					return false;
2632				}
2633			}
2634			return true;
2635		},
2636
2637		"parent": function( elem ) {
2638			return !Expr.pseudos["empty"]( elem );
2639		},
2640
2641		// Element/input types
2642		"header": function( elem ) {
2643			return rheader.test( elem.nodeName );
2644		},
2645
2646		"input": function( elem ) {
2647			return rinputs.test( elem.nodeName );
2648		},
2649
2650		"button": function( elem ) {
2651			var name = elem.nodeName.toLowerCase();
2652			return name === "input" && elem.type === "button" || name === "button";
2653		},
2654
2655		"text": function( elem ) {
2656			var attr;
2657			return elem.nodeName.toLowerCase() === "input" &&
2658				elem.type === "text" &&
2659
2660				// Support: IE<8
2661				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
2662				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
2663		},
2664
2665		// Position-in-collection
2666		"first": createPositionalPseudo(function() {
2667			return [ 0 ];
2668		}),
2669
2670		"last": createPositionalPseudo(function( matchIndexes, length ) {
2671			return [ length - 1 ];
2672		}),
2673
2674		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
2675			return [ argument < 0 ? argument + length : argument ];
2676		}),
2677
2678		"even": createPositionalPseudo(function( matchIndexes, length ) {
2679			var i = 0;
2680			for ( ; i < length; i += 2 ) {
2681				matchIndexes.push( i );
2682			}
2683			return matchIndexes;
2684		}),
2685
2686		"odd": createPositionalPseudo(function( matchIndexes, length ) {
2687			var i = 1;
2688			for ( ; i < length; i += 2 ) {
2689				matchIndexes.push( i );
2690			}
2691			return matchIndexes;
2692		}),
2693
2694		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2695			var i = argument < 0 ? argument + length : argument;
2696			for ( ; --i >= 0; ) {
2697				matchIndexes.push( i );
2698			}
2699			return matchIndexes;
2700		}),
2701
2702		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2703			var i = argument < 0 ? argument + length : argument;
2704			for ( ; ++i < length; ) {
2705				matchIndexes.push( i );
2706			}
2707			return matchIndexes;
2708		})
2709	}
2710};
2711
2712Expr.pseudos["nth"] = Expr.pseudos["eq"];
2713
2714// Add button/input type pseudos
2715for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
2716	Expr.pseudos[ i ] = createInputPseudo( i );
2717}
2718for ( i in { submit: true, reset: true } ) {
2719	Expr.pseudos[ i ] = createButtonPseudo( i );
2720}
2721
2722// Easy API for creating new setFilters
2723function setFilters() {}
2724setFilters.prototype = Expr.filters = Expr.pseudos;
2725Expr.setFilters = new setFilters();
2726
2727tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2728	var matched, match, tokens, type,
2729		soFar, groups, preFilters,
2730		cached = tokenCache[ selector + " " ];
2731
2732	if ( cached ) {
2733		return parseOnly ? 0 : cached.slice( 0 );
2734	}
2735
2736	soFar = selector;
2737	groups = [];
2738	preFilters = Expr.preFilter;
2739
2740	while ( soFar ) {
2741
2742		// Comma and first run
2743		if ( !matched || (match = rcomma.exec( soFar )) ) {
2744			if ( match ) {
2745				// Don't consume trailing commas as valid
2746				soFar = soFar.slice( match[0].length ) || soFar;
2747			}
2748			groups.push( (tokens = []) );
2749		}
2750
2751		matched = false;
2752
2753		// Combinators
2754		if ( (match = rcombinators.exec( soFar )) ) {
2755			matched = match.shift();
2756			tokens.push({
2757				value: matched,
2758				// Cast descendant combinators to space
2759				type: match[0].replace( rtrim, " " )
2760			});
2761			soFar = soFar.slice( matched.length );
2762		}
2763
2764		// Filters
2765		for ( type in Expr.filter ) {
2766			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
2767				(match = preFilters[ type ]( match ))) ) {
2768				matched = match.shift();
2769				tokens.push({
2770					value: matched,
2771					type: type,
2772					matches: match
2773				});
2774				soFar = soFar.slice( matched.length );
2775			}
2776		}
2777
2778		if ( !matched ) {
2779			break;
2780		}
2781	}
2782
2783	// Return the length of the invalid excess
2784	// if we're just parsing
2785	// Otherwise, throw an error or return tokens
2786	return parseOnly ?
2787		soFar.length :
2788		soFar ?
2789			Sizzle.error( selector ) :
2790			// Cache the tokens
2791			tokenCache( selector, groups ).slice( 0 );
2792};
2793
2794function toSelector( tokens ) {
2795	var i = 0,
2796		len = tokens.length,
2797		selector = "";
2798	for ( ; i < len; i++ ) {
2799		selector += tokens[i].value;
2800	}
2801	return selector;
2802}
2803
2804function addCombinator( matcher, combinator, base ) {
2805	var dir = combinator.dir,
2806		checkNonElements = base && dir === "parentNode",
2807		doneName = done++;
2808
2809	return combinator.first ?
2810		// Check against closest ancestor/preceding element
2811		function( elem, context, xml ) {
2812			while ( (elem = elem[ dir ]) ) {
2813				if ( elem.nodeType === 1 || checkNonElements ) {
2814					return matcher( elem, context, xml );
2815				}
2816			}
2817		} :
2818
2819		// Check against all ancestor/preceding elements
2820		function( elem, context, xml ) {
2821			var oldCache, uniqueCache, outerCache,
2822				newCache = [ dirruns, doneName ];
2823
2824			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
2825			if ( xml ) {
2826				while ( (elem = elem[ dir ]) ) {
2827					if ( elem.nodeType === 1 || checkNonElements ) {
2828						if ( matcher( elem, context, xml ) ) {
2829							return true;
2830						}
2831					}
2832				}
2833			} else {
2834				while ( (elem = elem[ dir ]) ) {
2835					if ( elem.nodeType === 1 || checkNonElements ) {
2836						outerCache = elem[ expando ] || (elem[ expando ] = {});
2837
2838						// Support: IE <9 only
2839						// Defend against cloned attroperties (jQuery gh-1709)
2840						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
2841
2842						if ( (oldCache = uniqueCache[ dir ]) &&
2843							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2844
2845							// Assign to newCache so results back-propagate to previous elements
2846							return (newCache[ 2 ] = oldCache[ 2 ]);
2847						} else {
2848							// Reuse newcache so results back-propagate to previous elements
2849							uniqueCache[ dir
vendor: 12,959 bytes, lines 2849-3292
2849 ] = newCache;
2850
2851							// A match means we're done; a fail means we have to keep checking
2852							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
2853								return true;
2854							}
2855						}
2856					}
2857				}
2858			}
2859		};
2860}
2861
2862function elementMatcher( matchers ) {
2863	return matchers.length > 1 ?
2864		function( elem, context, xml ) {
2865			var i = matchers.length;
2866			while ( i-- ) {
2867				if ( !matchers[i]( elem, context, xml ) ) {
2868					return false;
2869				}
2870			}
2871			return true;
2872		} :
2873		matchers[0];
2874}
2875
2876function multipleContexts( selector, contexts, results ) {
2877	var i = 0,
2878		len = contexts.length;
2879	for ( ; i < len; i++ ) {
2880		Sizzle( selector, contexts[i], results );
2881	}
2882	return results;
2883}
2884
2885function condense( unmatched, map, filter, context, xml ) {
2886	var elem,
2887		newUnmatched = [],
2888		i = 0,
2889		len = unmatched.length,
2890		mapped = map != null;
2891
2892	for ( ; i < len; i++ ) {
2893		if ( (elem = unmatched[i]) ) {
2894			if ( !filter || filter( elem, context, xml ) ) {
2895				newUnmatched.push( elem );
2896				if ( mapped ) {
2897					map.push( i );
2898				}
2899			}
2900		}
2901	}
2902
2903	return newUnmatched;
2904}
2905
2906function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
2907	if ( postFilter && !postFilter[ expando ] ) {
2908		postFilter = setMatcher( postFilter );
2909	}
2910	if ( postFinder && !postFinder[ expando ] ) {
2911		postFinder = setMatcher( postFinder, postSelector );
2912	}
2913	return markFunction(function( seed, results, context, xml ) {
2914		var temp, i, elem,
2915			preMap = [],
2916			postMap = [],
2917			preexisting = results.length,
2918
2919			// Get initial elements from seed or context
2920			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
2921
2922			// Prefilter to get matcher input, preserving a map for seed-results synchronization
2923			matcherIn = preFilter && ( seed || !selector ) ?
2924				condense( elems, preMap, preFilter, context, xml ) :
2925				elems,
2926
2927			matcherOut = matcher ?
2928				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2929				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2930
2931					// ...intermediate processing is necessary
2932					[] :
2933
2934					// ...otherwise use results directly
2935					results :
2936				matcherIn;
2937
2938		// Find primary matches
2939		if ( matcher ) {
2940			matcher( matcherIn, matcherOut, context, xml );
2941		}
2942
2943		// Apply postFilter
2944		if ( postFilter ) {
2945			temp = condense( matcherOut, postMap );
2946			postFilter( temp, [], context, xml );
2947
2948			// Un-match failing elements by moving them back to matcherIn
2949			i = temp.length;
2950			while ( i-- ) {
2951				if ( (elem = temp[i]) ) {
2952					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
2953				}
2954			}
2955		}
2956
2957		if ( seed ) {
2958			if ( postFinder || preFilter ) {
2959				if ( postFinder ) {
2960					// Get the final matcherOut by condensing this intermediate into postFinder contexts
2961					temp = [];
2962					i = matcherOut.length;
2963					while ( i-- ) {
2964						if ( (elem = matcherOut[i]) ) {
2965							// Restore matcherIn since elem is not yet a final match
2966							temp.push( (matcherIn[i] = elem) );
2967						}
2968					}
2969					postFinder( null, (matcherOut = []), temp, xml );
2970				}
2971
2972				// Move matched elements from seed to results to keep them synchronized
2973				i = matcherOut.length;
2974				while ( i-- ) {
2975					if ( (elem = matcherOut[i]) &&
2976						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
2977
2978						seed[temp] = !(results[temp] = elem);
2979					}
2980				}
2981			}
2982
2983		// Add elements to results, through postFinder if defined
2984		} else {
2985			matcherOut = condense(
2986				matcherOut === results ?
2987					matcherOut.splice( preexisting, matcherOut.length ) :
2988					matcherOut
2989			);
2990			if ( postFinder ) {
2991				postFinder( null, results, matcherOut, xml );
2992			} else {
2993				push.apply( results, matcherOut );
2994			}
2995		}
2996	});
2997}
2998
2999function matcherFromTokens( tokens ) {
3000	var checkContext, matcher, j,
3001		len = tokens.length,
3002		leadingRelative = Expr.relative[ tokens[0].type ],
3003		implicitRelative = leadingRelative || Expr.relative[" "],
3004		i = leadingRelative ? 1 : 0,
3005
3006		// The foundational matcher ensures that elements are reachable from top-level context(s)
3007		matchContext = addCombinator( function( elem ) {
3008			return elem === checkContext;
3009		}, implicitRelative, true ),
3010		matchAnyContext = addCombinator( function( elem ) {
3011			return indexOf( checkContext, elem ) > -1;
3012		}, implicitRelative, true ),
3013		matchers = [ function( elem, context, xml ) {
3014			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
3015				(checkContext = context).nodeType ?
3016					matchContext( elem, context, xml ) :
3017					matchAnyContext( elem, context, xml ) );
3018			// Avoid hanging onto element (issue #299)
3019			checkContext = null;
3020			return ret;
3021		} ];
3022
3023	for ( ; i < len; i++ ) {
3024		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
3025			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
3026		} else {
3027			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
3028
3029			// Return special upon seeing a positional matcher
3030			if ( matcher[ expando ] ) {
3031				// Find the next relative operator (if any) for proper handling
3032				j = ++i;
3033				for ( ; j < len; j++ ) {
3034					if ( Expr.relative[ tokens[j].type ] ) {
3035						break;
3036					}
3037				}
3038				return setMatcher(
3039					i > 1 && elementMatcher( matchers ),
3040					i > 1 && toSelector(
3041						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
3042						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
3043					).replace( rtrim, "$1" ),
3044					matcher,
3045					i < j && matcherFromTokens( tokens.slice( i, j ) ),
3046					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
3047					j < len && toSelector( tokens )
3048				);
3049			}
3050			matchers.push( matcher );
3051		}
3052	}
3053
3054	return elementMatcher( matchers );
3055}
3056
3057function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
3058	var bySet = setMatchers.length > 0,
3059		byElement = elementMatchers.length > 0,
3060		superMatcher = function( seed, context, xml, results, outermost ) {
3061			var elem, j, matcher,
3062				matchedCount = 0,
3063				i = "0",
3064				unmatched = seed && [],
3065				setMatched = [],
3066				contextBackup = outermostContext,
3067				// We must always have either seed elements or outermost context
3068				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
3069				// Use integer dirruns iff this is the outermost matcher
3070				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
3071				len = elems.length;
3072
3073			if ( outermost ) {
3074				outermostContext = context === document || context || outermost;
3075			}
3076
3077			// Add elements passing elementMatchers directly to results
3078			// Support: IE<9, Safari
3079			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
3080			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
3081				if ( byElement && elem ) {
3082					j = 0;
3083					if ( !context && elem.ownerDocument !== document ) {
3084						setDocument( elem );
3085						xml = !documentIsHTML;
3086					}
3087					while ( (matcher = elementMatchers[j++]) ) {
3088						if ( matcher( elem, context || document, xml) ) {
3089							results.push( elem );
3090							break;
3091						}
3092					}
3093					if ( outermost ) {
3094						dirruns = dirrunsUnique;
3095					}
3096				}
3097
3098				// Track unmatched elements for set filters
3099				if ( bySet ) {
3100					// They will have gone through all possible matchers
3101					if ( (elem = !matcher && elem) ) {
3102						matchedCount--;
3103					}
3104
3105					// Lengthen the array for every element, matched or not
3106					if ( seed ) {
3107						unmatched.push( elem );
3108					}
3109				}
3110			}
3111
3112			// `i` is now the count of elements visited above, and adding it to `matchedCount`
3113			// makes the latter nonnegative.
3114			matchedCount += i;
3115
3116			// Apply set filters to unmatched elements
3117			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
3118			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
3119			// no element matchers and no seed.
3120			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
3121			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
3122			// numerically zero.
3123			if ( bySet && i !== matchedCount ) {
3124				j = 0;
3125				while ( (matcher = setMatchers[j++]) ) {
3126					matcher( unmatched, setMatched, context, xml );
3127				}
3128
3129				if ( seed ) {
3130					// Reintegrate element matches to eliminate the need for sorting
3131					if ( matchedCount > 0 ) {
3132						while ( i-- ) {
3133							if ( !(unmatched[i] || setMatched[i]) ) {
3134								setMatched[i] = pop.call( results );
3135							}
3136						}
3137					}
3138
3139					// Discard index placeholder values to get only actual matches
3140					setMatched = condense( setMatched );
3141				}
3142
3143				// Add matches to results
3144				push.apply( results, setMatched );
3145
3146				// Seedless set matches succeeding multiple successful matchers stipulate sorting
3147				if ( outermost && !seed && setMatched.length > 0 &&
3148					( matchedCount + setMatchers.length ) > 1 ) {
3149
3150					Sizzle.uniqueSort( results );
3151				}
3152			}
3153
3154			// Override manipulation of globals by nested matchers
3155			if ( outermost ) {
3156				dirruns = dirrunsUnique;
3157				outermostContext = contextBackup;
3158			}
3159
3160			return unmatched;
3161		};
3162
3163	return bySet ?
3164		markFunction( superMatcher ) :
3165		superMatcher;
3166}
3167
3168compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
3169	var i,
3170		setMatchers = [],
3171		elementMatchers = [],
3172		cached = compilerCache[ selector + " " ];
3173
3174	if ( !cached ) {
3175		// Generate a function of recursive functions that can be used to check each element
3176		if ( !match ) {
3177			match = tokenize( selector );
3178		}
3179		i = match.length;
3180		while ( i-- ) {
3181			cached = matcherFromTokens( match[i] );
3182			if ( cached[ expando ] ) {
3183				setMatchers.push( cached );
3184			} else {
3185				elementMatchers.push( cached );
3186			}
3187		}
3188
3189		// Cache the compiled function
3190		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
3191
3192		// Save selector and tokenization
3193		cached.selector = selector;
3194	}
3195	return cached;
3196};
3197
3198/**
3199 * A low-level selection function that works with Sizzle's compiled
3200 *  selector functions
3201 * @param {String|Function} selector A selector or a pre-compiled
3202 *  selector function built with Sizzle.compile
3203 * @param {Element} context
3204 * @param {Array} [results]
3205 * @param {Array} [seed] A set of elements to match against
3206 */
3207select = Sizzle.select = function( selector, context, results, seed ) {
3208	var i, tokens, token, type, find,
3209		compiled = typeof selector === "function" && selector,
3210		match = !seed && tokenize( (selector = compiled.selector || selector) );
3211
3212	results = results || [];
3213
3214	// Try to minimize operations if there is only one selector in the list and no seed
3215	// (the latter of which guarantees us context)
3216	if ( match.length === 1 ) {
3217
3218		// Reduce context if the leading compound selector is an ID
3219		tokens = match[0] = match[0].slice( 0 );
3220		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
3221				support.getById && context.nodeType === 9 && documentIsHTML &&
3222				Expr.relative[ tokens[1].type ] ) {
3223
3224			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
3225			if ( !context ) {
3226				return results;
3227
3228			// Precompiled matchers will still verify ancestry, so step up a level
3229			} else if ( compiled ) {
3230				context = context.parentNode;
3231			}
3232
3233			selector = selector.slice( tokens.shift().value.length );
3234		}
3235
3236		// Fetch a seed set for right-to-left matching
3237		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
3238		while ( i-- ) {
3239			token = tokens[i];
3240
3241			// Abort if we hit a combinator
3242			if ( Expr.relative[ (type = token.type) ] ) {
3243				break;
3244			}
3245			if ( (find = Expr.find[ type ]) ) {
3246				// Search, expanding context for leading sibling combinators
3247				if ( (seed = find(
3248					token.matches[0].replace( runescape, funescape ),
3249					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
3250				)) ) {
3251
3252					// If seed is empty or no tokens remain, we can return early
3253					tokens.splice( i, 1 );
3254					selector = seed.length && toSelector( tokens );
3255					if ( !selector ) {
3256						push.apply( results, seed );
3257						return results;
3258					}
3259
3260					break;
3261				}
3262			}
3263		}
3264	}
3265
3266	// Compile and execute a filtering function if one is not provided
3267	// Provide `match` to avoid retokenization if we modified the selector above
3268	( compiled || compile( selector, match ) )(
3269		seed,
3270		context,
3271		!documentIsHTML,
3272		results,
3273		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
3274	);
3275	return results;
3276};
3277
3278// One-time assignments
3279
3280// Sort stability
3281support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
3282
3283// Support: Chrome 14-35+
3284// Always assume duplicates if they aren't passed to the comparison function
3285support.detectDuplicates = !!hasDuplicate;
3286
3287// Initialize against the default document
3288setDocument();
3289
3290// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
3291// Detached nodes confoundingly follow *each other*
3292support.sortDetached = assert(function( 
vendor: 3,546 bytes, lines 3292-3445
3292div1 ) {
3293	// Should return 1, but returns 4 (following)
3294	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
3295});
3296
3297// Support: IE<8
3298// Prevent attribute/property "interpolation"
3299// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
3300if ( !assert(function( div ) {
3301	div.innerHTML = "<a href='#'></a>";
3302	return div.firstChild.getAttribute("href") === "#" ;
3303}) ) {
3304	addHandle( "type|href|height|width", function( elem, name, isXML ) {
3305		if ( !isXML ) {
3306			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
3307		}
3308	});
3309}
3310
3311// Support: IE<9
3312// Use defaultValue in place of getAttribute("value")
3313if ( !support.attributes || !assert(function( div ) {
3314	div.innerHTML = "<input/>";
3315	div.firstChild.setAttribute( "value", "" );
3316	return div.firstChild.getAttribute( "value" ) === "";
3317}) ) {
3318	addHandle( "value", function( elem, name, isXML ) {
3319		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
3320			return elem.defaultValue;
3321		}
3322	});
3323}
3324
3325// Support: IE<9
3326// Use getAttributeNode to fetch booleans when getAttribute lies
3327if ( !assert(function( div ) {
3328	return div.getAttribute("disabled") == null;
3329}) ) {
3330	addHandle( booleans, function( elem, name, isXML ) {
3331		var val;
3332		if ( !isXML ) {
3333			return elem[ name ] === true ? name.toLowerCase() :
3334					(val = elem.getAttributeNode( name )) && val.specified ?
3335					val.value :
3336				null;
3337		}
3338	});
3339}
3340
3341return Sizzle;
3342
3343})( window );
3344
3345
3346
3347jQuery.find = Sizzle;
3348jQuery.expr = Sizzle.selectors;
3349jQuery.expr[ ":" ] = jQuery.expr.pseudos;
3350jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
3351jQuery.text = Sizzle.getText;
3352jQuery.isXMLDoc = Sizzle.isXML;
3353jQuery.contains = Sizzle.contains;
3354
3355
3356
3357var dir = function( elem, dir, until ) {
3358	var matched = [],
3359		truncate = until !== undefined;
3360
3361	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
3362		if ( elem.nodeType === 1 ) {
3363			if ( truncate && jQuery( elem ).is( until ) ) {
3364				break;
3365			}
3366			matched.push( elem );
3367		}
3368	}
3369	return matched;
3370};
3371
3372
3373var siblings = function( n, elem ) {
3374	var matched = [];
3375
3376	for ( ; n; n = n.nextSibling ) {
3377		if ( n.nodeType === 1 && n !== elem ) {
3378			matched.push( n );
3379		}
3380	}
3381
3382	return matched;
3383};
3384
3385
3386var rneedsContext = jQuery.expr.match.needsContext;
3387
3388var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
3389
3390
3391
3392var risSimple = /^.[^:#\[\.,]*$/;
3393
3394// Implement the identical functionality for filter and not
3395function winnow( elements, qualifier, not ) {
3396	if ( jQuery.isFunction( qualifier ) ) {
3397		return jQuery.grep( elements, function( elem, i ) {
3398			/* jshint -W018 */
3399			return !!qualifier.call( elem, i, elem ) !== not;
3400		} );
3401
3402	}
3403
3404	if ( qualifier.nodeType ) {
3405		return jQuery.grep( elements, function( elem ) {
3406			return ( elem === qualifier ) !== not;
3407		} );
3408
3409	}
3410
3411	if ( typeof qualifier === "string" ) {
3412		if ( risSimple.test( qualifier ) ) {
3413			return jQuery.filter( qualifier, elements, not );
3414		}
3415
3416		qualifier = jQuery.filter( qualifier, elements );
3417	}
3418
3419	return jQuery.grep( elements, function( elem ) {
3420		return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;
3421	} );
3422}
3423
3424jQuery.filter = function( expr, elems, not ) {
3425	var elem = elems[ 0 ];
3426
3427	if ( not ) {
3428		expr = ":not(" + expr + ")";
3429	}
3430
3431	return elems.length === 1 && elem.nodeType === 1 ?
3432		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
3433		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
3434			return elem.nodeType === 1;
3435		} ) );
3436};
3437
3438jQuery.fn.extend( {
3439	find: function( selector ) {
3440		var i,
3441			ret = [],
3442			self = this,
3443			len = self.length;
3444
3445		if ( typeof selector !== "string" ) {
3446			return this.pushStack( jQuery( selector ).filter( function() {
3447				for ( i = 0; i < len; i++ ) {
3448					if ( jQuery.contains( self[ i ], this ) ) {
3449						return true;
3450					}
3451				}
3452			} ) );
3453		}
3454
3455		for ( i = 0; i < len; i++ ) {
3456			jQuery.find( selector, self[ i ], ret );
3457		}
3458
3459		// Needed because $( selector, context ) becomes $( context ).find( selector )
3460		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
3461		ret.selector = this.selector ? this.selector + " " + selector : selector;
3462		return ret;
3463	},
3464	filter: function( selector ) {
3465		return this.pushStack( winnow( this, selector || [], false ) );
3466	},
3467	not: function( selector ) {
3468		return this.pushStack( winnow( this, selector || [], true ) );
3469	},
3470	is: function( selector ) {
3471		return !!winnow(
3472			this,
3473
3474			// If this is a positional/relative selector, check membership in the returned set
3475			// so $("p:first").is("p:last") won't return true for a doc with two "p".
3476			typeof selector === "string" && rneedsContext.test( selector ) ?
3477				jQuery( selector ) :
3478				selector || [],
3479			false
3480		).length;
3481	}
3482} );
3483
3484
3485// Initialize a jQuery object
3486
3487
3488// A central reference to the root jQuery(document)
3489var rootjQuery,
3490
3491	// A simple way to check for HTML strings
3492	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
3493	// Strict HTML recognition (#11290: must start with <)
3494	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
3495
3496	init = jQuery.fn.init = function( selector, context, root ) {
3497		var match, elem;
3498
3499		// HANDLE: $(""), $(null), $(undefined), $(false)
3500		if ( !selector ) {
3501			return this;
3502		}
3503
3504		// init accepts an alternate rootjQuery
3505		// so migrate can support jQuery.sub (gh-2101)
3506		root = root || rootjQuery;
3507
3508		// Handle HTML strings
3509		if ( typeof selector === "string" ) {
3510			if ( selector.charAt( 0 ) === "<" &&
3511				selector.charAt( selector.length - 1 ) === ">" &&
3512				selector.length >= 3 ) {
3513
3514				// Assume that strings that start and end with <> are HTML and skip the regex check
3515				match = [ null, selector, null ];
3516
3517			} else {
3518				match = rquickExpr.exec( selector );
3519			}
3520
3521			// Match html or make sure no context is specified for #id
3522			if ( match && ( match[ 1 ] || !context ) ) {
3523
3524				// HANDLE: $(html) -> $(array)
3525				if ( match[ 1 ] ) {
3526					context = context instanceof jQuery ? context[ 0 ] : context;
3527
3528					// scripts is true for back-compat
3529					// Intentionally let the error be thrown if parseHTML is not present
3530					jQuery.merge( this, jQuery.parseHTML(
3531						match[ 1 ],
3532						context && context.nodeType ? context.ownerDocument || context : document,
3533						true
3534					) );
3535
3536					// HANDLE: $(html, props)
3537					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
3538						for ( match in context ) {
3539
3540							// Properties of context are called as methods if possible
3541							if ( jQuery.isFunction( this[ match ] ) ) {
3542								this[ match ]( context[ match ] );
3543
3544							// ...and otherwise set as attributes
3545							} else {
3546								this.attr( match, context[ match ] );
3547							}
3548						}
3549					}
3550
3551					return this;
3552
3553				// HANDLE: $(#id)
3554				} else {
3555					elem = document.getElementById( match[ 2 ] );
3556
3557					// Check parentNode to catch when Blackberry 4.6 returns
3558					// nodes that are no longer in the document #6963
3559					if ( elem && elem.parentNode ) {
3560
3561						// Handle the case where IE and Opera return items
3562						// by name instead of ID
3563						if ( elem.id !== match[ 2 ] ) {
3564							return rootjQuery.find( selector );
3565						}
3566
3567						// Otherwise, we inject the element directly into the jQuery object
3568						this.length = 1;
3569						this[ 0 ] = elem;
3570					}
3571
3572					this.context = document;
3573					this.selector = selector;
3574					return this;
3575				}
3576
3577			// HANDLE: $(expr, $(...))
3578			} else if ( !context || context.jquery ) {
3579				return ( context || root ).find( selector );
3580
3581			// HANDLE: $(expr, context)
3582			// (which is just equivalent to: $(context).find(expr)
3583			} else {
3584				return this.constructor( context ).find( selector );
3585			}
3586
3587		// HANDLE: $(DOMElement)
3588		} else if ( selector.nodeType ) {
3589			this.context = this[ 0 ] = selector;
3590			this.length = 1;
3591			return this;
3592
3593		// HANDLE: $(function)
3594		// Shortcut for document ready
3595		} else if ( jQuery.isFunction( selector ) ) {
3596			return typeof root.ready !== "undefined" ?
3597				root.ready( selector ) :
3598
3599				// Execute immediately if ready is not present
3600				selector( jQuery );
3601		}
3602
3603		if ( selector.selector !== undefined ) {
3604			this.selector = selector.selector;
3605			this.context = selector.context;
3606		}
3607
3608		return jQuery.makeArray( selector, this );
3609	};
3610
3611// Give the init function the jQuery prototype for later instantiation
3612init.prototype = jQuery.fn;
3613
3614// Initialize central reference
3615rootjQuery = jQuery( document );
3616
3617
3618var rparentsprev = /^(?:parents|prev(?:Until|All))/,
3619
3620	// methods guaranteed to produce a unique set when starting from a unique set
3621	guaranteedUnique = {
3622		children: true,
3623		contents: true,
3624		next: true,
3625		prev: true
3626	};
3627
3628jQuery.fn.extend( {
3629	has: function( target ) {
3630		var i,
3631			targets = jQuery( target, this ),
3632			len = targets.length;
3633
3634		return this.filter( function() {
3635			for ( i = 0; i < len; i++ ) {
3636				if ( jQuery.contains( this, targets[ i ] ) ) {
3637					return true;
3638				}
3639			}
3640		} );
3641	},
3642
3643	closest: function( selectors, context ) {
3644		var cur,
3645			i = 0,
3646			l = this.length,
3647			matched = [],
3648			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
vendor: 5,562 bytes, lines 3649-3867
3649				jQuery( selectors, context || this.context ) :
3650				0;
3651
3652		for ( ; i < l; i++ ) {
3653			for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
3654
3655				// Always skip document fragments
3656				if ( cur.nodeType < 11 && ( pos ?
3657					pos.index( cur ) > -1 :
3658
3659					// Don't pass non-elements to Sizzle
3660					cur.nodeType === 1 &&
3661						jQuery.find.matchesSelector( cur, selectors ) ) ) {
3662
3663					matched.push( cur );
3664					break;
3665				}
3666			}
3667		}
3668
3669		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
3670	},
3671
3672	// Determine the position of an element within
3673	// the matched set of elements
3674	index: function( elem ) {
3675
3676		// No argument, return index in parent
3677		if ( !elem ) {
3678			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
3679		}
3680
3681		// index in selector
3682		if ( typeof elem === "string" ) {
3683			return jQuery.inArray( this[ 0 ], jQuery( elem ) );
3684		}
3685
3686		// Locate the position of the desired element
3687		return jQuery.inArray(
3688
3689			// If it receives a jQuery object, the first element is used
3690			elem.jquery ? elem[ 0 ] : elem, this );
3691	},
3692
3693	add: function( selector, context ) {
3694		return this.pushStack(
3695			jQuery.uniqueSort(
3696				jQuery.merge( this.get(), jQuery( selector, context ) )
3697			)
3698		);
3699	},
3700
3701	addBack: function( selector ) {
3702		return this.add( selector == null ?
3703			this.prevObject : this.prevObject.filter( selector )
3704		);
3705	}
3706} );
3707
3708function sibling( cur, dir ) {
3709	do {
3710		cur = cur[ dir ];
3711	} while ( cur && cur.nodeType !== 1 );
3712
3713	return cur;
3714}
3715
3716jQuery.each( {
3717	parent: function( elem ) {
3718		var parent = elem.parentNode;
3719		return parent && parent.nodeType !== 11 ? parent : null;
3720	},
3721	parents: function( elem ) {
3722		return dir( elem, "parentNode" );
3723	},
3724	parentsUntil: function( elem, i, until ) {
3725		return dir( elem, "parentNode", until );
3726	},
3727	next: function( elem ) {
3728		return sibling( elem, "nextSibling" );
3729	},
3730	prev: function( elem ) {
3731		return sibling( elem, "previousSibling" );
3732	},
3733	nextAll: function( elem ) {
3734		return dir( elem, "nextSibling" );
3735	},
3736	prevAll: function( elem ) {
3737		return dir( elem, "previousSibling" );
3738	},
3739	nextUntil: function( elem, i, until ) {
3740		return dir( elem, "nextSibling", until );
3741	},
3742	prevUntil: function( elem, i, until ) {
3743		return dir( elem, "previousSibling", until );
3744	},
3745	siblings: function( elem ) {
3746		return siblings( ( elem.parentNode || {} ).firstChild, elem );
3747	},
3748	children: function( elem ) {
3749		return siblings( elem.firstChild );
3750	},
3751	contents: function( elem ) {
3752		return jQuery.nodeName( elem, "iframe" ) ?
3753			elem.contentDocument || elem.contentWindow.document :
3754			jQuery.merge( [], elem.childNodes );
3755	}
3756}, function( name, fn ) {
3757	jQuery.fn[ name ] = function( until, selector ) {
3758		var ret = jQuery.map( this, fn, until );
3759
3760		if ( name.slice( -5 ) !== "Until" ) {
3761			selector = until;
3762		}
3763
3764		if ( selector && typeof selector === "string" ) {
3765			ret = jQuery.filter( selector, ret );
3766		}
3767
3768		if ( this.length > 1 ) {
3769
3770			// Remove duplicates
3771			if ( !guaranteedUnique[ name ] ) {
3772				ret = jQuery.uniqueSort( ret );
3773			}
3774
3775			// Reverse order for parents* and prev-derivatives
3776			if ( rparentsprev.test( name ) ) {
3777				ret = ret.reverse();
3778			}
3779		}
3780
3781		return this.pushStack( ret );
3782	};
3783} );
3784var rnotwhite = ( /\S+/g );
3785
3786
3787
3788// Convert String-formatted options into Object-formatted ones
3789function createOptions( options ) {
3790	var object = {};
3791	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
3792		object[ flag ] = true;
3793	} );
3794	return object;
3795}
3796
3797/*
3798 * Create a callback list using the following parameters:
3799 *
3800 *	options: an optional list of space-separated options that will change how
3801 *			the callback list behaves or a more traditional option object
3802 *
3803 * By default a callback list will act like an event callback list and can be
3804 * "fired" multiple times.
3805 *
3806 * Possible options:
3807 *
3808 *	once:			will ensure the callback list can only be fired once (like a Deferred)
3809 *
3810 *	memory:			will keep track of previous values and will call any callback added
3811 *					after the list has been fired right away with the latest "memorized"
3812 *					values (like a Deferred)
3813 *
3814 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
3815 *
3816 *	stopOnFalse:	interrupt callings when a callback returns false
3817 *
3818 */
3819jQuery.Callbacks = function( options ) {
3820
3821	// Convert options from String-formatted to Object-formatted if needed
3822	// (we check in cache first)
3823	options = typeof options === "string" ?
3824		createOptions( options ) :
3825		jQuery.extend( {}, options );
3826
3827	var // Flag to know if list is currently firing
3828		firing,
3829
3830		// Last fire value for non-forgettable lists
3831		memory,
3832
3833		// Flag to know if list was already fired
3834		fired,
3835
3836		// Flag to prevent firing
3837		locked,
3838
3839		// Actual callback list
3840		list = [],
3841
3842		// Queue of execution data for repeatable lists
3843		queue = [],
3844
3845		// Index of currently firing callback (modified by add/remove as needed)
3846		firingIndex = -1,
3847
3848		// Fire callbacks
3849		fire = function() {
3850
3851			// Enforce single-firing
3852			locked = options.once;
3853
3854			// Execute callbacks for all pending executions,
3855			// respecting firingIndex overrides and runtime changes
3856			fired = firing = true;
3857			for ( ; queue.length; firingIndex = -1 ) {
3858				memory = queue.shift();
3859				while ( ++firingIndex < list.length ) {
3860
3861					// Run callback and check for early termination
3862					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
3863						options.stopOnFalse ) {
3864
3865						// Jump to end and forget the data so .add doesn't re-fire
3866						firingIndex = list.length;
3867						memory = false;
3868					}
3869				}
3870			}
3871
3872			// Forget the data if we're done with it
3873			if ( !options.memory ) {
3874				memory = false;
3875			}
3876
3877			firing = false;
3878
3879			// Clean up if we're done firing for good
3880			if ( locked ) {
3881
3882				// Keep an empty list if we have data for future add calls
3883				if ( memory ) {
3884					list = [];
3885
3886				// Otherwise, this object is spent
3887				} else {
3888					list = "";
3889				}
3890			}
3891		},
3892
3893		// Actual Callbacks object
3894		self = {
3895
3896			// Add a callback or a collection of callbacks to the list
3897			add: function() {
3898				if ( list ) {
3899
3900					// If we have memory from a past run, we should fire after adding
3901					if ( memory && !firing ) {
3902						firingIndex = list.length - 1;
3903						queue.push( memory );
3904					}
3905
3906					( function add( args ) {
3907						jQuery.each( args, function( _, arg ) {
3908							if ( jQuery.isFunction( arg ) ) {
3909								if ( !options.unique || !self.has( arg ) ) {
3910									list.push( arg );
3911								}
3912							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
3913
3914								// Inspect recursively
3915								add( arg );
3916							}
3917						} );
3918					} )( arguments );
3919
3920					if ( memory && !firing ) {
3921						fire();
3922					}
3923				}
3924				return this;
3925			},
3926
3927			// Remove a callback from the list
3928			remove: function() {
3929				jQuery.each( arguments, function( _, arg ) {
3930					var index;
3931					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
3932						list.splice( index, 1 );
3933
3934						// Handle firing indexes
3935						if ( index <= firingIndex ) {
3936							firingIndex--;
3937						}
3938					}
3939				} );
3940				return this;
3941			},
3942
3943			// Check if a given callback is in the list.
3944			// If no argument is given, return whether or not list has callbacks attached.
3945			has: function( fn ) {
3946				return fn ?
3947					jQuery.inArray( fn, list ) > -1 :
3948					list.length > 0;
3949			},
3950
3951			// Remove all callbacks from the list
3952			empty: function() {
3953				if ( list ) {
3954					list = [];
3955				}
3956				return this;
3957			},
3958
3959			// Disable .fire and .add
3960			// Abort any current/pending executions
3961			// Clear all callbacks and values
3962			disable: function() {
3963				locked = queue = [];
3964				list = memory = "";
3965				return this;
3966			},
3967			disabled: function() {
3968				return !list;
3969			},
3970
3971			// Disable .fire
3972			// Also disable .add unless we have memory (since it would have no effect)
3973			// Abort any pending executions
3974			lock: function() {
3975				locked = true;
3976				if ( !memory ) {
3977					self.disable();
3978				}
3979				return this;
3980			},
3981			locked: function() {
3982				return !!locked;
3983			},
3984
3985			// Call all callbacks with the given context and arguments
3986			fireWith: function( context, args ) {
3987				if ( !locked ) {
3988					args = args || [];
3989					args = [ context, args.slice ? args.slice() : args ];
3990					queue.push( args );
3991					if ( !firing ) {
3992						fire();
3993					}
3994				}
3995				return this;
3996			},
3997
3998			// Call all the callbacks with the given arguments
3999			fire: function() {
4000				self.fireWith( this, arguments );
4001				return this;
4002			},
4003
4004			// To know if the callbacks have already been called at least once
4005			fired: function() {
4006				return !!fired;
4007			}
4008		};
4009
4010	return self;
4011};
4012
4013
4014jQuery.extend( {
4015
4016	Deferred: function( func ) {
4017		var tuples = [
4018
4019				// action, add listener, listener list, final state
4020				[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
4021				[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
4022				[ "notify", "progress", jQuery.Callbacks( "memory" ) ]
4023			],
4024			state = "pending",
4025			promise = {
4026				state: function() {
4027					return state;
4028				},
4029				always: function() {
4030					deferred.done( arguments ).fail( arguments );
4031					return this;
4032				},
4033				then: function( /* fnDone, fnFail, fnProgress */ ) {
4034					var fns = arguments;
4035					return jQuery.Deferred( function( newDefer ) {
4036						jQuery.each( tuples, function( i, tuple ) {
4037							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
4038
4039							// deferred[ done | fail | progress ] for forwarding actions to newDefer
4040							deferred[ tuple[ 1 ] ]( function() {
4041								var returned = fn && fn.apply( this, arguments );
4042								if ( returned && jQuery.isFunction( returned.promise ) ) {
4043									returned.promise()
4044										.progress( newDefer.notify )
4045										.done( newDefer.resolve )
4046										.fail( newDefer.reject );
4047								} else {
4048									newDefer[ tuple[ 0 ] + "With" ](
4049										this === promise ? newDefer.promise() : this,
4050										fn ? [ returned ] : arguments
4051									);
4052								}
4053							} );
4054						} );
4055						fns = null;
4056					} ).promise();
4057				},
4058
4059				// Get a promise for this deferred
4060				// If obj is provided, the promise aspect is added to the object
4061				promise: function( obj ) {
4062					return obj != null ? jQuery.extend( obj, promise ) : promise;
4063				}
4064			},
4065			deferred = {};
4066
4067		// Keep pipe for back-compat
4068		promise.pipe = promise.then;
4069
4070		// Add list-specific methods
4071		jQuery.each( tuples, function( i, tuple ) {
4072			var list = tuple[ 2 ],
4073				stateString = tuple[ 3 ];
4074
4075			// promise[ done | fail | progress ] = list.add
4076			promise[ tuple[ 1 ] ] = list.add;
4077
4078			// Handle state
4079			if ( stateString ) {
4080				list.add( function() {
4081
4082					// state = [ resolved | rejected ]
4083					state = stateString;
4084
4085				// [ reject_list | resolve_list ].disable; progress_list.lock
4086				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
4087			}
4088
4089			// deferred[ resolve | reject | notify ]
4090			deferred[ tuple[ 0 ] ] = function() {
4091				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
4092				return this;
4093			};
4094			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
4095		} );
4096
4097		// Make the deferred a promise
4098		promise.promise( deferred );
4099
4100		// Call given func if any
4101		if ( func ) {
4102			func.call( deferred, deferred );
4103		}
4104
4105		// All done!
4106		return deferred;
4107	},
4108
4109	// Deferred helper
4110	when: function( subordinate /* , ..., subordinateN */ ) {
4111		var i = 0,
4112			resolveValues = slice.call( arguments ),
4113			length = resolveValues.length,
4114
4115			// the count of uncompleted subordinates
4116			remaining = length !== 1 ||
4117				( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
4118
4119			// the master Deferred.
4120			// If resolveValues consist of only a single Deferred, just use that.
4121			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
4122
4123			// Update function for both resolve and progress values
4124			updateFunc = function( i, contexts, values ) {
4125				return function( value ) {
4126					contexts[ i ] = this;
4127					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
4128					if ( values === progressValues ) {
4129						deferred.notifyWith( contexts, values );
4130
4131					} else if ( !( --remaining ) ) {
4132						deferred.resolveWith( contexts, values );
4133					}
4134				};
4135			},
4136
4137			progressValues, progressContexts, resolveContexts;
4138
4139		// add listeners to Deferred subordinates; treat others as resolved
4140		if ( length > 1 ) {
4141			progressValues = new Array( length );
4142			progressContexts = new Array( length );
4143			resolveContexts = new Array( length );
4144			for ( ; i < length; i++ ) {
4145				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
4146					resolveValues[ i ].promise()
4147						.progress( updateFunc( i, progressContexts, progressValues ) )
4148						.done( updateFunc( i, resolveContexts, resolveValues ) )
4149						.fail( deferred.reject );
4150				} else {
4151					--remaining;
4152				}
4153			}
4154		}
4155
4156		// if we're not waiting on anything, resolve the master
4157		if ( !remaining ) {
4158			deferred.resolveWith( resolveContexts, resolveValues );
4159		}
4160
4161		return deferred.promise();
4162	}
4163} );
4164
4165
4166// The deferred used on DOM ready
4167var readyList;
4168
4169jQuery.fn.ready = function( fn ) {
4170
4171	// Add the callback
4172	jQuery.ready.promise().done( fn );
4173
4174	return this;
4175};
4176
4177jQuery.extend( {
4178
4179	// Is the DOM ready to be used? Set to true once it occurs.
4180	isReady: false,
4181
4182	// A counter to track how many items to wait for before
4183	// the ready event fires. See #6781
4184	readyWait: 1,
4185
4186	// Hold (or release) the ready event
4187	holdReady: function( hold ) {
4188		if ( hold ) {
4189			jQuery.readyWait++;
4190		} else {
4191			jQuery.ready( true );
4192		}
4193	},
4194
4195	// Handle when the DOM is ready
4196	ready: function( wait ) {
4197
4198		// Abort if there are pending holds or we're already ready
4199		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
4200			return;
4201		}
4202
4203		// Remember that the DOM is ready
4204		jQuery.isReady = true;
4205
4206		// If a normal DOM Ready event fired, decrement, and wait if need be
4207		if ( wait !== true && --jQuery.readyWait > 0 ) {
4208			return;
4209		}
4210
4211		// If there are functions bound, to execute
4212		readyList.resolveWith( document, [ jQuery ] );
4213
4214		// Trigger any bound ready events
4215		if ( jQuery.fn.triggerHandler ) {
4216			jQuery( document ).triggerHandler( "ready" );
4217			jQuery( document ).off( "ready" );
4218		}
4219	}
4220} );
4221
4222/**
4223 * Clean-up method for dom ready events
4224 */
4225function detach() {
4226	if ( document.addEventListener ) {
4227		document.removeEventListener( "DOMContentLoaded", completed );
4228		window.removeEventListener( "load", completed );
4229
4230	} else {
4231		document.detachEvent( "onreadystatechange", completed );
4232		window.detachEvent( "onload", completed );
4233	}
4234}
4235
4236/**
4237 * The ready event handler and self cleanup method
4238 */
4239function completed() {
4240
4241	// readyState === "complete" is good enough for us to call the dom ready in oldIE
4242	if ( document.addEventListener ||
4243		window.event.type === "load" ||
4244		document.readyState === "complete" ) {
4245
4246		detach();
4247		jQuery.ready();
4248	}
4249}
4250
4251jQuery.ready.promise = function( obj ) {
4252	if ( !readyList ) {
4253
4254		readyList = jQuery.Deferred();
4255
4256		// Catch cases where $(document).ready() is called
4257		// after the browser event has already occurred.
4258		// Support: IE6-10
4259		// Older IE sometimes signals "interactive" too soon
4260		if ( document.readyState === "complete" ||
4261			( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
4262
4263			// Handle it asynchronously to allow scripts the opportunity to delay ready
4264			window.setTimeout( jQuery.ready );
4265
4266		// Standards-based browsers support DOMContentLoaded
4267		} else if ( document.addEventListener ) {
4268
4269			// Use the handy event callback
4270			document.addEventListener( "DOMContentLoaded", completed );
4271
4272			// A fallback to window.onload, that will always work
4273			window.addEventListener( "load", completed );
4274
4275		// If IE event model is used
4276		} else {
4277
4278			// Ensure firing before onload, maybe late but safe also for iframes
4279			document.attachEvent( "onreadystatechange", completed );
4280
4281			// A fallback to window.onload, that will always work
4282			window.attachEvent( "onload", completed );
4283
4284			// If IE and not a frame
4285			// continually check to see if the document is ready
4286			var top = false;
4287
4288			try {
4289				top = window.frameElement == null && document.documentElement;
4290			} catch ( e ) {}
4291
4292			if ( top && top.doScroll ) {
4293				( function doScrollCheck() {
4294					if ( !jQuery.isReady ) {
4295
4296						try {
4297
4298							// Use the trick by Diego Perini
4299							// http://javascript.nwbox.com/IEContentLoaded/
4300							top.doScroll( "left" );
4301						} catch ( e ) {
4302							return window.setTimeout( doScrollCheck, 50 );
4303						}
4304
4305						// detach all dom ready events
4306						detach();
4307
4308						// and execute any waiting functions
4309						jQuery.ready();
4310					}
4311				} )();
4312			}
4313		}
4314	}
4315	return readyList.promise( obj );
4316};
4317
4318// Kick off the DOM ready check even if the user does not
4319jQuery.ready.promise();
4320
4321
4322
4323
4324// Support: IE<9
4325// Iteration over object's inherited properties before its own
4326var i;
4327for ( i in jQuery( support ) ) {
4328	break;
4329}
4330support.ownFirst = i === "0";
4331
4332// Note: most support tests are defined in their respective modules.
4333// false until the test is run
4334support.inlineBlockNeedsLayout = false;
4335
4336// Execute ASAP in case we need to set body.style.zoom
4337jQuery( function() {
4338
4339	// Minified: var a,b,c,d
4340	var val, div, body, container;
4341
4342	body = document.getElementsByTagName( "body" )[ 0 ];
4343	if ( !body || !body.style ) {
4344
4345		// Return for frameset docs that don't have a body
4346		return;
4347	}
4348
4349	// Setup
4350	div = document.createElement( "div" );
4351	container = document.createElement( "div" );
4352	container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
4353	body.appendChild( container ).appendChild( div );
4354
4355	if ( typeof div.style.zoom !== "undefined" ) {
4356
4357		// Support: IE<8
4358		// Check if natively block-level elements act like inline-block
4359		// elements when setting their display to 'inline' and giving
4360		// them layout
4361		div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
4362
4363		support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
4364		if ( val ) {
4365
4366			// Prevent IE 6 from affecting layout for positioned elements #11048
4367			// Prevent IE from shrinking the body in IE 7 mode #12869
4368			// Support: IE<8
4369			body.style.zoom = 1;
4370		}
4371	}
4372
4373	body.removeChild( container );
4374} );
4375
4376
4377( function() {
4378	var div = document.createElement( "div" );
4379
4380	// Support: IE<9
4381	support.deleteExpando = true;
4382	try {
4383		delete div.test;
4384	} catch ( e ) {
4385		support.deleteExpando = false;
4386	}
4387
4388	// Null elements to avoid leaks in IE.
4389	div = null;
4390} )();
4391var acceptData = function( elem ) {
4392	var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ],
4393		nodeType = +elem.nodeType || 1;
4394
4395	// Do not set data on non-element DOM nodes because it will not be cleared (#8335).
4396	return nodeType !== 1 && nodeType !== 9 ?
4397		false :
4398
4399		// Nodes accept data unless otherwise specified; rejection can be conditional
4400		!noData || noData !== true && elem.getAttribute( "classid" ) === noData;
4401};
4402
4403
4404
4405
4406var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4407	rmultiDash = /([A-Z])/g;
4408
4409function dataAttr( elem, key, data ) {
4410
4411	// If nothing was found internally, try to fetch any
4412	// data from the HTML5 data-* attribute
4413	if ( data === undefined && elem.nodeType === 1 ) {
4414
4415		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
4416
4417		data = elem.getAttribute( name );
4418
4419		if ( typeof data === "string" ) {
4420			try {
4421				data = data === "true" ? true :
4422					data === "false" ? false :
4423					data === "null" ? null :
4424
4425					// Only convert to a number if it doesn't change the string
4426					+data + "" === data ? +data :
4427					rbrace.test( data ) ? jQuery.parseJSON( data ) :
4428					data;
4429			} catch ( e ) {}
4430
4431			// Make sure we set the data so it isn't changed later
4432			jQuery.data( elem, key, data );
4433
4434		} else {
4435			data = undefined;
4436		}
4437	}
4438
4439	return data;
4440}
4441
4442// checks a cache object for emptiness
4443function isEmptyDataObject( obj ) {
4444	var name;
4445	for ( name in obj ) {
4446
4447		// if the public data object is empty, the private is still empty
4448		if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) {
4449			continue;
4450		}
4451		if ( name !== "toJSON" ) {
4452			return false;
4453		}
4454	}
4455
4456	return true;
4457}
4458
4459function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
4460	if ( !acceptData( elem ) ) {
4461		return;
4462	}
4463
4464	var ret, thisCache,
4465		internalKey = jQuery.expando,
4466
4467		// We have to handle DOM nodes and JS objects differently because IE6-7
4468		// can't GC object references properly across the DOM-JS boundary
4469		isNode = elem.nodeType,
4470
4471		// Only DOM nodes need the global jQuery cache; JS object data is
4472		// attached directly to the object so GC can occur automatically
4473		cache = isNode ? jQuery.cache : elem,
4474
4475		// Only defining an ID for JS objects if its cache already exists allows
4476		// the code to shortcut on the same path as a DOM node with no cache
4477		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
4478
4479	// Avoid doing any more work than we need to when trying to get data on an
4480	// object that has no data at all
4481	if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&
4482		data === undefined && typeof name === "string" ) {
4483		return;
4484	}
4485
4486	if ( !id ) {
4487
4488		// Only DOM nodes need a new unique ID for each element since their data
4489		// ends up in the global cache
4490		if ( isNode ) {
4491			id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
4492		} else {
4493			id = internalKey;
4494		}
4495	}
4496
4497	if ( !cache[ id ] ) {
4498
4499		// Avoid exposing jQuery metadata on plain JS objects when the object
4500		// is serialized using JSON.stringify
4501		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
4502	}
4503
4504	// An object can be passed to jQuery.data instead of a key/value pair; this gets
4505	// shallow copied over onto the existing cache
4506	if ( typeof name === "object" || typeof name === "function" ) {
4507		if ( pvt ) {
4508			cache[ id ] = jQuery.extend( cache[ id ], name );
4509		} else {
4510			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
4511		}
4512	}
4513
4514	thisCache = cache[ id ];
4515
4516	// jQuery data() is stored in a separate object inside the object's internal data
4517	// cache in order to avoid key collisions between internal data and user-defined
4518	// data.
4519	if ( !pvt ) {
4520		if ( !thisCache.data ) {
4521			thisCache.data = {};
4522		}
4523
4524		thisCache = thisCache.data;
4525	}
4526
4527	if ( data !== undefined ) {
4528		thisCache[ jQuery.camelCase( name ) ] = data;
4529	}
4530
4531	// Check for both converted-to-camel and non-converted data property names
4532	// If a data property was specified
4533	if ( typeof name === "string" ) {
4534
4535		// First Try to find as-is property data
4536		ret = thisCache[ name ];
4537
4538		// Test for null|undefined property data
4539		if ( ret == null ) {
4540
4541			// Try to find the camelCased property
4542			ret = thisCache[ jQuery.camelCase( name ) ];
4543		}
4544	} else {
4545		ret = thisCache;
4546	}
4547
4548	return ret;
4549}
4550
4551function internalRemoveData( elem, name, pvt ) {
4552	if ( !acceptData( elem ) ) {
4553		return;
4554	}
4555
4556	var thisCache, i,
4557		isNode = elem.nodeType,
4558
4559		// See jQuery.data for more information
4560		cache = isNode ? jQuery.cache : elem,
4561		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
4562
4563	// If there is already no cache entry for this object, there is no
4564	// purpose in continuing
4565	if ( !cache[ id ] ) {
4566		return;
4567	}
4568
4569	if ( name ) {
4570
4571		thisCache = pvt ? cache[ id ] : cache[ id ].data;
4572
4573		if ( thisCache ) {
4574
4575			// Support array or space separated string names for data keys
4576			if ( !jQuery.isArray( name ) ) {
4577
4578				// try the string as a key before any manipulation
4579				if ( name in thisCache ) {
4580					name = [ name ];
4581				} else {
4582
4583					// split the camel cased version by spaces unless a key with the spaces exists
4584					name = jQuery.camelCase( name );
4585					if ( name in thisCache ) {
4586						name = [ name ];
4587					} else {
4588						name = name.split( " " );
4589					}
4590				}
4591			} else {
4592
4593				// If "name" is an array of keys...
4594				// When data is initially created, via ("key", "val") signature,
4595				// keys will be converted to camelCase.
4596				// Since there is no way to tell _how_ a key was added, remove
4597				// both plain key and camelCase key. #12786
4598				// This will only penalize the array argument path.
4599				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
4600			}
4601
4602			i = name.length;
4603			while ( i-- ) {
4604				delete thisCache[ name[ i ] ];
4605			}
4606
4607			// If there is no data left in the cache, we want to continue
4608			// and let the cache object itself get destroyed
4609			if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {
4610				return;
4611			}
4612		}
4613	}
4614
4615	// See jQuery.data for more information
4616	if ( !pvt ) {
4617		delete cache[ id ].data;
4618
4619		// Don't destroy the parent cache unless the internal data object
4620		// had been the only thing left in it
4621		if ( !isEmptyDataObject( cache[ id ] ) ) {
4622			return;
4623		}
4624	}
4625
4626	// Destroy the cache
4627	if ( isNode ) {
4628		jQuery.cleanData( [ elem ], true );
4629
4630	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
4631	/* jshint eqeqeq: false */
4632	} else if ( support.deleteExpando || cache != cache.window ) {
4633		/* jshint eqeqeq: true */
4634		delete cache[ id ];
4635
4636	// When all else fails, undefined
4637	} else {
4638		cache[ id ] = undefined;
4639	}
4640}
4641
4642jQuery.extend( {
4643	cache: {},
4644
4645	// The following elements (space-suffixed to avoid Object.prototype collisions)
4646	// throw uncatchable exceptions if you attempt to set expando properties
4647	noData: {
4648		"applet ": true,
4649		"embed ": true,
4650
4651		// ...but Flash objects (which have this classid) *can* handle expandos
4652		"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
4653	},
4654
4655	hasData: function( elem ) {
4656		elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];
4657		return !!elem && !isEmptyDataObject( elem );
4658	},
4659
4660	data: function( elem, name, data ) {
4661		return internalData( elem, name, data );
4662	},
4663
4664	removeData: function( elem, name ) {
4665		return internalRemoveData( elem, name );
4666	},
4667
4668	// For internal use only.
4669	_data: function( elem, name, data ) {
4670		return internalData( elem, name, data, true );
4671	},
4672
4673	_removeData: function( elem, name ) {
4674		return internalRemoveData( elem, name, true );
4675	}
4676} );
4677
4678jQuery.fn.extend( {
4679	data: function( key, value ) {
4680		var i, name, data,
4681			elem = this[ 0 ],
4682			attrs = elem && elem.attributes;
4683
4684		// Special expections of .data basically thwart jQuery.access,
4685		// so implement the relevant behavior ourselves
4686
4687		// Gets all values
4688		if ( key === undefined ) {
4689			if ( this.length ) {
4690				data = jQuery.data( elem );
4691
4692				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
4693					i = attrs.length;
4694					while ( i-- ) {
4695
4696						// Support: IE11+
4697						// The attrs elements can be null (#14894)
4698						if ( attrs[ i ] ) {
4699							name = attrs[ i ].name;
4700							if ( name.indexOf( "data-" ) === 0 ) {
4701								name = jQuery.camelCase( name.slice( 5 ) );
4702								dataAttr( elem, name, data[ name ] );
4703							}
4704						}
4705					}
4706					jQuery._data( elem, "parsedAttrs", true );
4707				}
4708			}
4709
4710			return data;
4711		}
4712
4713		// Sets multiple values
4714		if ( typeof key === "object" ) {
4715			return this.each( function() {
4716				jQuery.data( this, key );
4717			} );
4718		}
4719
4720		return arguments.length > 1 ?
4721
4722			// Sets one value
4723			this.each( function() {
4724				jQuery.data( this, key, value );
4725			} ) :
4726
4727			// Gets one value
4728			// Try to fetch any internally stored data first
4729			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
4730	},
4731
4732	removeData: function( key ) {
4733		return this.each( function() {
4734			jQuery.removeData( this, key );
4735		} );
4736	}
4737} );
4738
4739
4740jQuery.extend( {
4741	queue: function( elem, type, data ) {
4742		var queue;
4743
4744		if ( elem ) {
4745			type = ( type || "fx" ) + "queue";
4746			queue = jQuery._data( elem, type );
4747
4748			// Speed up dequeue by getting out quickly if this is just a lookup
4749			if ( data ) {
4750				if ( !queue || jQuery.isArray( data ) ) {
4751					queue = jQuery._data( elem, type, jQuery.makeArray( data ) );
4752				} else {
4753					queue.push( data );
4754				}
4755			}
4756			return queue || [];
4757		}
4758	},
4759
4760	dequeue: function( elem, type ) {
vendor: 2,750 bytes, lines 4761-4886
4761		type = type || "fx";
4762
4763		var queue = jQuery.queue( elem, type ),
4764			startLength = queue.length,
4765			fn = queue.shift(),
4766			hooks = jQuery._queueHooks( elem, type ),
4767			next = function() {
4768				jQuery.dequeue( elem, type );
4769			};
4770
4771		// If the fx queue is dequeued, always remove the progress sentinel
4772		if ( fn === "inprogress" ) {
4773			fn = queue.shift();
4774			startLength--;
4775		}
4776
4777		if ( fn ) {
4778
4779			// Add a progress sentinel to prevent the fx queue from being
4780			// automatically dequeued
4781			if ( type === "fx" ) {
4782				queue.unshift( "inprogress" );
4783			}
4784
4785			// clear up the last queue stop function
4786			delete hooks.stop;
4787			fn.call( elem, next, hooks );
4788		}
4789
4790		if ( !startLength && hooks ) {
4791			hooks.empty.fire();
4792		}
4793	},
4794
4795	// not intended for public consumption - generates a queueHooks object,
4796	// or returns the current one
4797	_queueHooks: function( elem, type ) {
4798		var key = type + "queueHooks";
4799		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
4800			empty: jQuery.Callbacks( "once memory" ).add( function() {
4801				jQuery._removeData( elem, type + "queue" );
4802				jQuery._removeData( elem, key );
4803			} )
4804		} );
4805	}
4806} );
4807
4808jQuery.fn.extend( {
4809	queue: function( type, data ) {
4810		var setter = 2;
4811
4812		if ( typeof type !== "string" ) {
4813			data = type;
4814			type = "fx";
4815			setter--;
4816		}
4817
4818		if ( arguments.length < setter ) {
4819			return jQuery.queue( this[ 0 ], type );
4820		}
4821
4822		return data === undefined ?
4823			this :
4824			this.each( function() {
4825				var queue = jQuery.queue( this, type, data );
4826
4827				// ensure a hooks for this queue
4828				jQuery._queueHooks( this, type );
4829
4830				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
4831					jQuery.dequeue( this, type );
4832				}
4833			} );
4834	},
4835	dequeue: function( type ) {
4836		return this.each( function() {
4837			jQuery.dequeue( this, type );
4838		} );
4839	},
4840	clearQueue: function( type ) {
4841		return this.queue( type || "fx", [] );
4842	},
4843
4844	// Get a promise resolved when queues of a certain type
4845	// are emptied (fx is the type by default)
4846	promise: function( type, obj ) {
4847		var tmp,
4848			count = 1,
4849			defer = jQuery.Deferred(),
4850			elements = this,
4851			i = this.length,
4852			resolve = function() {
4853				if ( !( --count ) ) {
4854					defer.resolveWith( elements, [ elements ] );
4855				}
4856			};
4857
4858		if ( typeof type !== "string" ) {
4859			obj = type;
4860			type = undefined;
4861		}
4862		type = type || "fx";
4863
4864		while ( i-- ) {
4865			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
4866			if ( tmp && tmp.empty ) {
4867				count++;
4868				tmp.empty.add( resolve );
4869			}
4870		}
4871		resolve();
4872		return defer.promise( obj );
4873	}
4874} );
4875
4876
4877( function() {
4878	var shrinkWrapBlocksVal;
4879
4880	support.shrinkWrapBlocks = function() {
4881		if ( shrinkWrapBlocksVal != null ) {
4882			return shrinkWrapBlocksVal;
4883		}
4884
4885		// Will be changed later if needed.
4886		shrinkWrapBlocksVal = false;
4887
4888		// Minified: var b,c,d
4889		var div, body, container;
4890
4891		body = document.getElementsByTagName( "body" )[ 0 ];
4892		if ( !body || !body.style ) {
4893
4894			// Test fired too early or in an unsupported environment, exit.
4895			return;
4896		}
4897
4898		// Setup
4899		div = document.createElement( "div" );
4900		container = document.createElement( "div" );
4901		container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
4902		body.appendChild( container ).appendChild( div );
4903
4904		// Support: IE6
4905		// Check if elements with layout shrink-wrap their children
4906		if ( typeof div.style.zoom !== "undefined" ) {
4907
4908			// Reset CSS: box-sizing; display; margin; border
4909			div.style.cssText =
4910
4911				// Support: Firefox<29, Android 2.3
4912				// Vendor-prefix box-sizing
4913				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
4914				"box-sizing:content-box;display:block;margin:0;border:0;" +
4915				"padding:1px;width:1px;zoom:1";
4916			div.appendChild( document.createElement( "div" ) ).style.width = "5px";
4917			shrinkWrapBlocksVal = div.offsetWidth !== 3;
4918		}
4919
4920		body.removeChild( container );
4921
4922		return shrinkWrapBlocksVal;
4923	};
4924
4925} )();
4926var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
4927
4928var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
4929
4930
4931var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
4932
4933var isHidden = function( elem, el ) {
4934
4935		// isHidden might be called from jQuery#filter function;
4936		// in that case, element will be second argument
4937		elem = el || elem;
4938		return jQuery.css( elem, "display" ) === "none" ||
4939			!jQuery.contains( elem.ownerDocument, elem );
4940	};
4941
4942
4943
4944function adjustCSS( elem, prop, valueParts, tween ) {
4945	var adjusted,
4946		scale = 1,
4947		maxIterations = 20,
4948		currentValue = tween ?
4949			function() { return tween.cur(); } :
4950			function() { return jQuery.css( elem, prop, "" ); },
4951		initial = currentValue(),
4952		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
4953
4954		// Starting value computation is required for potential unit mismatches
4955		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
4956			rcssNum.exec( jQuery.css( elem, prop ) );
4957
4958	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
4959
4960		// Trust units reported by jQuery.css
4961		unit = unit || initialInUnit[ 3 ];
4962
4963		// Make sure we update the tween properties later on
4964		valueParts = valueParts || [];
4965
4966		// Iteratively approximate from a nonzero starting point
4967		initialInUnit = +initial || 1;
4968
4969		do {
4970
4971			// If previous iteration zeroed out, double until we get *something*.
4972			// Use string for doubling so we don't accidentally see scale as unchanged below
4973			scale = scale || ".5";
4974
4975			// Adjust and apply
4976			initialInUnit = initialInUnit / scale;
4977			jQuery.style( elem, prop, initialInUnit + unit );
4978
4979		// Update scale, tolerating zero or NaN from tween.cur()
4980		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
4981		} while (
4982			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
4983		);
4984	}
4985
4986	if ( valueParts ) {
4987		initialInUnit = +initialInUnit || +initial || 0;
4988
4989		// Apply relative offset (+=/-=) if specified
4990		adjusted = valueParts[ 1 ] ?
4991			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
4992			+valueParts[ 2 ];
4993		if ( tween ) {
4994			tween.unit = unit;
4995			tween.start = initialInUnit;
4996			tween.end = adjusted;
4997		}
4998	}
4999	return adjusted;
5000}
5001
5002
5003// Multifunctional method to get and set values of a collection
5004// The value/s can optionally be executed if it's a function
5005var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
5006	var i = 0,
5007		length = elems.length,
5008		bulk = key == null;
5009
5010	// Sets many values
5011	if ( jQuery.type( key ) === "object" ) {
5012		chainable = true;
5013		for ( i in key ) {
5014			access( elems, fn, i, key[ i ], true, emptyGet, raw );
5015		}
5016
5017	// Sets one value
5018	} else if ( value !== undefined ) {
5019		chainable = true;
5020
5021		if ( !jQuery.isFunction( value ) ) {
5022			raw = true;
5023		}
5024
5025		if ( bulk ) {
5026
5027			// Bulk operations run against the entire set
5028			if ( raw ) {
5029				fn.call( elems, value );
5030				fn = null;
5031
5032			// ...except when executing function values
5033			} else {
5034				bulk = fn;
5035				fn = function( elem, key, value ) {
5036					return bulk.call( jQuery( elem ), value );
5037				};
5038			}
5039		}
5040
5041		if ( fn ) {
5042			for ( ; i < length; i++ ) {
5043				fn(
5044					elems[ i ],
5045					key,
5046					raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )
5047				);
5048			}
5049		}
5050	}
5051
5052	return chainable ?
5053		elems :
5054
5055		// Gets
5056		bulk ?
5057			fn.call( elems ) :
5058			length ? fn( elems[ 0 ], key ) : emptyGet;
5059};
5060var rcheckableType = ( /^(?:checkbox|radio)$/i );
5061
5062var rtagName = ( /<([\w:-]+)/ );
5063
5064var rscriptType = ( /^$|\/(?:java|ecma)script/i );
5065
5066var rleadingWhitespace = ( /^\s+/ );
5067
5068var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" +
5069		"details|dialog|figcaption|figure|footer|header|hgroup|main|" +
5070		"mark|meter|nav|output|picture|progress|section|summary|template|time|video";
5071
5072
5073
5074function createSafeFragment( document ) {
5075	var list = nodeNames.split( "|" ),
5076		safeFrag = document.createDocumentFragment();
5077
5078	if ( safeFrag.createElement ) {
5079		while ( list.length ) {
5080			safeFrag.createElement(
5081				list.pop()
5082			);
5083		}
5084	}
5085	return safeFrag;
5086}
5087
5088
5089( function() {
5090	var div = document.createElement( "div" ),
5091		fragment = document.createDocumentFragment(),
5092		input = document.createElement( "input" );
5093
5094	// Setup
5095	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
5096
5097	// IE strips leading whitespace when .innerHTML is used
5098	support.leadingWhitespace = div.firstChild.nodeType === 3;
5099
5100	// Make sure that tbody elements aren't automatically inserted
5101	// IE will insert them into empty tables
5102	support.tbody = !div.getElementsByTagName( "tbody" ).length;
5103
5104	// Make sure that link elements get serialized correctly by innerHTML
5105	// This requires a wrapper element in IE
5106	support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
5107
5108	// Makes sure cloning an html5 element does not cause problems
5109	// Where outerHTML is undefined, this still works
5110	support.html5Clone =
5111		document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
5112
5113	// Check if a disconnected checkbox will retain its checked
5114	// value of true after appended to the DOM (IE6/7)
5115	input.type = "checkbox";
5116	input.checked = true;
5117	fragment.appendChild( input );
5118	support.appendChecked = input.checked;
5119
5120	// Make sure textarea (and checkbox) defaultValue is properly cloned
5121	// Support: IE6-IE11+
5122	div.innerHTML = "<textarea>x</textarea>";
5123	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
5124
5125	// #11217 - WebKit loses check when the name is after the checked attribute
5126	fragment.appendChild( div );
5127
5128	// Support: Windows Web Apps (WWA)
5129	// `name` and `type` must use .setAttribute for WWA (#14901)
5130	input = document.createElement( "input" );
5131	input.setAttribute( "type", "radio" );
5132	input.setAttribute( "checked", "checked" );
5133	input.setAttribute( "name", "t" );
5134
5135	div.appendChild( input );
5136
5137	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
5138	// old WebKit doesn't clone checked state correctly in fragments
5139	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
5140
5141	// Support: IE<9
5142	// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+
5143	support.noCloneEvent = !!div.addEventListener;
5144
5145	// Support: IE<9
5146	// Since attributes and properties are the same in IE,
5147	// cleanData must set properties to undefined rather than use removeAttribute
5148	div[ jQuery.expando ] = 1;
5149	support.attributes = !div.getAttribute( jQuery.expando );
5150} )();
5151
5152
5153// We have to close these tags to support XHTML (#13200)
5154var wrapMap = {
5155	option: [ 1, "<select multiple='multiple'>", "</select>" ],
5156	legend: [ 1, "<fieldset>", "</fieldset>" ],
5157	area: [ 1, "<map>", "</map>" ],
5158
5159	// Support: IE8
5160	param: [ 1, "<object>", "</object>" ],
5161	thead: [ 1, "<table>", "</table>" ],
5162	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
5163	col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
5164	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
5165
5166	// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
5167	// unless wrapped in a div with non-breaking characters in front of it.
5168	_default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
5169};
5170
5171// Support: IE8-IE9
5172wrapMap.optgroup = wrapMap.option;
5173
5174wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
5175wrapMap.th = wrapMap.td;
5176
5177
5178function getAll( context, tag ) {
5179	var elems, elem,
5180		i = 0,
5181		found = typeof context.getElementsByTagName !== "undefined" ?
5182			context.getElementsByTagName( tag || "*" ) :
5183			typeof context.querySelectorAll !== "undefined" ?
5184				context.querySelectorAll( tag || "*" ) :
5185				undefined;
5186
5187	if ( !found ) {
5188		for ( found = [], elems = context.childNodes || context;
5189			( elem = elems[ i ] ) != null;
5190			i++
5191		) {
5192			if ( !tag || jQuery.nodeName( elem, tag ) ) {
5193				found.push( elem );
5194			} else {
5195				jQuery.merge( found, getAll( elem, tag ) );
5196			}
5197		}
5198	}
5199
5200	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
5201		jQuery.merge( [ context ], found ) :
5202		found;
5203}
5204
5205
5206// Mark scripts as having already been evaluated
5207function setGlobalEval( elems, refElements ) {
5208	var elem,
5209		i = 0;
5210	for ( ; ( elem = elems[ i ] ) != null; i++ ) {
5211		jQuery._data(
5212			elem,
5213			"globalEval",
5214			!refElements || jQuery._data( refElements[ i ], "globalEval" )
5215		);
5216	}
5217}
5218
5219
5220var rhtml = /<|&#?\w+;/,
5221	rtbody = /<tbody/i;
5222
5223function fixDefaultChecked( elem ) {
5224	if ( rcheckableType.test( elem.type ) ) {
5225		elem.defaultChecked = elem.checked;
5226	}
5227}
5228
5229function buildFragment( elems, context, scripts, selection, ignored ) {
5230	var j, elem, contains,
5231		tmp, tag, tbody, wrap,
5232		l = elems.length,
5233
5234		// Ensure a safe fragment
5235		safe = createSafeFragment( context ),
5236
5237		nodes = [],
5238		i = 0;
5239
5240	for ( ; i < l; i++ ) {
5241		elem = elems[ i ];
5242
5243		if ( elem || elem === 0 ) {
5244
5245			// Add nodes directly
5246			if ( jQuery.type( elem ) === "object" ) {
5247				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
5248
5249			// Convert non-html into a text node
5250			} else if ( !rhtml.test( elem ) ) {
5251				nodes.push( context.createTextNode( elem ) );
5252
5253			// Convert html into DOM nodes
5254			} else {
5255				tmp = tmp || safe.appendChild( context.createElement( "div" ) );
5256
5257				// Deserialize a standard representation
5258				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
5259				wrap = wrapMap[ tag ] || wrapMap._default;
5260
5261				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
5262
5263				// Descend through wrappers to the right content
5264				j = wrap[ 0 ];
5265				while ( j-- ) {
5266					tmp = tmp.lastChild;
5267				}
5268
5269				// Manually add leading whitespace removed by IE
5270				if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
5271					nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );
5272				}
5273
5274				// Remove IE's autoinserted <tbody> from table fragments
5275				if ( !support.tbody ) {
5276
5277					// String was a <table>, *may* have spurious <tbody>
5278					elem = tag === "table" && !rtbody.test( elem ) ?
5279						tmp.firstChild :
5280
5281						// String was a bare <thead> or <tfoot>
5282						wrap[ 1 ] === "<table>" && !rtbody.test( elem ) ?
5283							tmp :
5284							0;
5285
5286					j = elem && elem.childNodes.length;
5287					while ( j-- ) {
5288						if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) &&
5289							!tbody.childNodes.length ) {
5290
5291							elem.removeChild( tbody );
5292						}
5293					}
5294				}
5295
5296				jQuery.merge( nodes, tmp.childNodes );
5297
5298				// Fix #12392 for WebKit and IE > 9
5299				tmp.textContent = "";
5300
5301				// Fix #12392 for oldIE
5302				while ( tmp.firstChild ) {
5303					tmp.removeChild( tmp.firstChild );
5304				}
5305
5306				// Remember the top-level container for proper cleanup
5307				tmp = safe.lastChild;
5308			}
5309		}
5310	}
5311
5312	// Fix #11356: Clear elements from fragment
5313	if ( tmp ) {
5314		safe.removeChild( tmp );
5315	}
5316
5317	// Reset defaultChecked for any radios and checkboxes
5318	// about to be appended to the DOM in IE 6/7 (#8060)
5319	if ( !support.appendChecked ) {
5320		jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
5321	}
5322
5323	i = 0;
5324	while ( ( elem = nodes[ i++ ] ) ) {
5325
5326		// Skip elements already in the context collection (trac-4087)
5327		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
5328			if ( ignored ) {
5329				ignored.push( elem );
5330			}
5331
5332			continue;
5333		}
5334
5335		contains = jQuery.contains( elem.ownerDocument, elem );
5336
5337		// Append to fragment
5338		tmp = getAll( safe.appendChild( elem ), "script" );
5339
5340		// Preserve script evaluation history
5341		if ( contains ) {
5342			setGlobalEval( tmp );
5343		}
5344
5345		// Capture executables
5346		if ( scripts ) {
5347			j = 0;
5348			while ( ( elem = tmp[ j++ ] ) ) {
5349				if ( rscriptType.test( elem.type || "" ) ) {
5350					scripts.push( elem );
5351				}
5352			}
5353		}
5354	}
5355
5356	tmp = null;
5357
5358	return safe;
5359}
5360
5361
5362( function() {
5363	var i, eventName,
5364		div = document.createElement( "div" );
5365
5366	// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)
5367	for ( i in { submit: true, change: true, focusin: true } ) {
5368		eventName = "on" + i;
5369
vendor: 13,833 bytes, lines 5370-5849
5370		if ( !( support[ i ] = eventName in window ) ) {
5371
5372			// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
5373			div.setAttribute( eventName, "t" );
5374			support[ i ] = div.attributes[ eventName ].expando === false;
5375		}
5376	}
5377
5378	// Null elements to avoid leaks in IE.
5379	div = null;
5380} )();
5381
5382
5383var rformElems = /^(?:input|select|textarea)$/i,
5384	rkeyEvent = /^key/,
5385	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
5386	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
5387	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
5388
5389function returnTrue() {
5390	return true;
5391}
5392
5393function returnFalse() {
5394	return false;
5395}
5396
5397// Support: IE9
5398// See #13393 for more info
5399function safeActiveElement() {
5400	try {
5401		return document.activeElement;
5402	} catch ( err ) { }
5403}
5404
5405function on( elem, types, selector, data, fn, one ) {
5406	var origFn, type;
5407
5408	// Types can be a map of types/handlers
5409	if ( typeof types === "object" ) {
5410
5411		// ( types-Object, selector, data )
5412		if ( typeof selector !== "string" ) {
5413
5414			// ( types-Object, data )
5415			data = data || selector;
5416			selector = undefined;
5417		}
5418		for ( type in types ) {
5419			on( elem, type, selector, data, types[ type ], one );
5420		}
5421		return elem;
5422	}
5423
5424	if ( data == null && fn == null ) {
5425
5426		// ( types, fn )
5427		fn = selector;
5428		data = selector = undefined;
5429	} else if ( fn == null ) {
5430		if ( typeof selector === "string" ) {
5431
5432			// ( types, selector, fn )
5433			fn = data;
5434			data = undefined;
5435		} else {
5436
5437			// ( types, data, fn )
5438			fn = data;
5439			data = selector;
5440			selector = undefined;
5441		}
5442	}
5443	if ( fn === false ) {
5444		fn = returnFalse;
5445	} else if ( !fn ) {
5446		return elem;
5447	}
5448
5449	if ( one === 1 ) {
5450		origFn = fn;
5451		fn = function( event ) {
5452
5453			// Can use an empty set, since event contains the info
5454			jQuery().off( event );
5455			return origFn.apply( this, arguments );
5456		};
5457
5458		// Use same guid so caller can remove using origFn
5459		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
5460	}
5461	return elem.each( function() {
5462		jQuery.event.add( this, types, fn, data, selector );
5463	} );
5464}
5465
5466/*
5467 * Helper functions for managing events -- not part of the public interface.
5468 * Props to Dean Edwards' addEvent library for many of the ideas.
5469 */
5470jQuery.event = {
5471
5472	global: {},
5473
5474	add: function( elem, types, handler, data, selector ) {
5475		var tmp, events, t, handleObjIn,
5476			special, eventHandle, handleObj,
5477			handlers, type, namespaces, origType,
5478			elemData = jQuery._data( elem );
5479
5480		// Don't attach events to noData or text/comment nodes (but allow plain objects)
5481		if ( !elemData ) {
5482			return;
5483		}
5484
5485		// Caller can pass in an object of custom data in lieu of the handler
5486		if ( handler.handler ) {
5487			handleObjIn = handler;
5488			handler = handleObjIn.handler;
5489			selector = handleObjIn.selector;
5490		}
5491
5492		// Make sure that the handler has a unique ID, used to find/remove it later
5493		if ( !handler.guid ) {
5494			handler.guid = jQuery.guid++;
5495		}
5496
5497		// Init the element's event structure and main handler, if this is the first
5498		if ( !( events = elemData.events ) ) {
5499			events = elemData.events = {};
5500		}
5501		if ( !( eventHandle = elemData.handle ) ) {
5502			eventHandle = elemData.handle = function( e ) {
5503
5504				// Discard the second event of a jQuery.event.trigger() and
5505				// when an event is called after a page has unloaded
5506				return typeof jQuery !== "undefined" &&
5507					( !e || jQuery.event.triggered !== e.type ) ?
5508					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
5509					undefined;
5510			};
5511
5512			// Add elem as a property of the handle fn to prevent a memory leak
5513			// with IE non-native events
5514			eventHandle.elem = elem;
5515		}
5516
5517		// Handle multiple events separated by a space
5518		types = ( types || "" ).match( rnotwhite ) || [ "" ];
5519		t = types.length;
5520		while ( t-- ) {
5521			tmp = rtypenamespace.exec( types[ t ] ) || [];
5522			type = origType = tmp[ 1 ];
5523			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5524
5525			// There *must* be a type, no attaching namespace-only handlers
5526			if ( !type ) {
5527				continue;
5528			}
5529
5530			// If event changes its type, use the special event handlers for the changed type
5531			special = jQuery.event.special[ type ] || {};
5532
5533			// If selector defined, determine special event api type, otherwise given type
5534			type = ( selector ? special.delegateType : special.bindType ) || type;
5535
5536			// Update special based on newly reset type
5537			special = jQuery.event.special[ type ] || {};
5538
5539			// handleObj is passed to all event handlers
5540			handleObj = jQuery.extend( {
5541				type: type,
5542				origType: origType,
5543				data: data,
5544				handler: handler,
5545				guid: handler.guid,
5546				selector: selector,
5547				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
5548				namespace: namespaces.join( "." )
5549			}, handleObjIn );
5550
5551			// Init the event handler queue if we're the first
5552			if ( !( handlers = events[ type ] ) ) {
5553				handlers = events[ type ] = [];
5554				handlers.delegateCount = 0;
5555
5556				// Only use addEventListener/attachEvent if the special events handler returns false
5557				if ( !special.setup ||
5558					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
5559
5560					// Bind the global event handler to the element
5561					if ( elem.addEventListener ) {
5562						elem.addEventListener( type, eventHandle, false );
5563
5564					} else if ( elem.attachEvent ) {
5565						elem.attachEvent( "on" + type, eventHandle );
5566					}
5567				}
5568			}
5569
5570			if ( special.add ) {
5571				special.add.call( elem, handleObj );
5572
5573				if ( !handleObj.handler.guid ) {
5574					handleObj.handler.guid = handler.guid;
5575				}
5576			}
5577
5578			// Add to the element's handler list, delegates in front
5579			if ( selector ) {
5580				handlers.splice( handlers.delegateCount++, 0, handleObj );
5581			} else {
5582				handlers.push( handleObj );
5583			}
5584
5585			// Keep track of which events have ever been used, for event optimization
5586			jQuery.event.global[ type ] = true;
5587		}
5588
5589		// Nullify elem to prevent memory leaks in IE
5590		elem = null;
5591	},
5592
5593	// Detach an event or set of events from an element
5594	remove: function( elem, types, handler, selector, mappedTypes ) {
5595		var j, handleObj, tmp,
5596			origCount, t, events,
5597			special, handlers, type,
5598			namespaces, origType,
5599			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
5600
5601		if ( !elemData || !( events = elemData.events ) ) {
5602			return;
5603		}
5604
5605		// Once for each type.namespace in types; type may be omitted
5606		types = ( types || "" ).match( rnotwhite ) || [ "" ];
5607		t = types.length;
5608		while ( t-- ) {
5609			tmp = rtypenamespace.exec( types[ t ] ) || [];
5610			type = origType = tmp[ 1 ];
5611			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5612
5613			// Unbind all events (on this namespace, if provided) for the element
5614			if ( !type ) {
5615				for ( type in events ) {
5616					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
5617				}
5618				continue;
5619			}
5620
5621			special = jQuery.event.special[ type ] || {};
5622			type = ( selector ? special.delegateType : special.bindType ) || type;
5623			handlers = events[ type ] || [];
5624			tmp = tmp[ 2 ] &&
5625				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
5626
5627			// Remove matching events
5628			origCount = j = handlers.length;
5629			while ( j-- ) {
5630				handleObj = handlers[ j ];
5631
5632				if ( ( mappedTypes || origType === handleObj.origType ) &&
5633					( !handler || handler.guid === handleObj.guid ) &&
5634					( !tmp || tmp.test( handleObj.namespace ) ) &&
5635					( !selector || selector === handleObj.selector ||
5636						selector === "**" && handleObj.selector ) ) {
5637					handlers.splice( j, 1 );
5638
5639					if ( handleObj.selector ) {
5640						handlers.delegateCount--;
5641					}
5642					if ( special.remove ) {
5643						special.remove.call( elem, handleObj );
5644					}
5645				}
5646			}
5647
5648			// Remove generic event handler if we removed something and no more handlers exist
5649			// (avoids potential for endless recursion during removal of special event handlers)
5650			if ( origCount && !handlers.length ) {
5651				if ( !special.teardown ||
5652					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
5653
5654					jQuery.removeEvent( elem, type, elemData.handle );
5655				}
5656
5657				delete events[ type ];
5658			}
5659		}
5660
5661		// Remove the expando if it's no longer used
5662		if ( jQuery.isEmptyObject( events ) ) {
5663			delete elemData.handle;
5664
5665			// removeData also checks for emptiness and clears the expando if empty
5666			// so use it instead of delete
5667			jQuery._removeData( elem, "events" );
5668		}
5669	},
5670
5671	trigger: function( event, data, elem, onlyHandlers ) {
5672		var handle, ontype, cur,
5673			bubbleType, special, tmp, i,
5674			eventPath = [ elem || document ],
5675			type = hasOwn.call( event, "type" ) ? event.type : event,
5676			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
5677
5678		cur = tmp = elem = elem || document;
5679
5680		// Don't do events on text and comment nodes
5681		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
5682			return;
5683		}
5684
5685		// focus/blur morphs to focusin/out; ensure we're not firing them right now
5686		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
5687			return;
5688		}
5689
5690		if ( type.indexOf( "." ) > -1 ) {
5691
5692			// Namespaced trigger; create a regexp to match event type in handle()
5693			namespaces = type.split( "." );
5694			type = namespaces.shift();
5695			namespaces.sort();
5696		}
5697		ontype = type.indexOf( ":" ) < 0 && "on" + type;
5698
5699		// Caller can pass in a jQuery.Event object, Object, or just an event type string
5700		event = event[ jQuery.expando ] ?
5701			event :
5702			new jQuery.Event( type, typeof event === "object" && event );
5703
5704		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
5705		event.isTrigger = onlyHandlers ? 2 : 3;
5706		event.namespace = namespaces.join( "." );
5707		event.rnamespace = event.namespace ?
5708			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
5709			null;
5710
5711		// Clean up the event in case it is being reused
5712		event.result = undefined;
5713		if ( !event.target ) {
5714			event.target = elem;
5715		}
5716
5717		// Clone any incoming data and prepend the event, creating the handler arg list
5718		data = data == null ?
5719			[ event ] :
5720			jQuery.makeArray( data, [ event ] );
5721
5722		// Allow special events to draw outside the lines
5723		special = jQuery.event.special[ type ] || {};
5724		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
5725			return;
5726		}
5727
5728		// Determine event propagation path in advance, per W3C events spec (#9951)
5729		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
5730		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
5731
5732			bubbleType = special.delegateType || type;
5733			if ( !rfocusMorph.test( bubbleType + type ) ) {
5734				cur = cur.parentNode;
5735			}
5736			for ( ; cur; cur = cur.parentNode ) {
5737				eventPath.push( cur );
5738				tmp = cur;
5739			}
5740
5741			// Only add window if we got to document (e.g., not plain obj or detached DOM)
5742			if ( tmp === ( elem.ownerDocument || document ) ) {
5743				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
5744			}
5745		}
5746
5747		// Fire handlers on the event path
5748		i = 0;
5749		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
5750
5751			event.type = i > 1 ?
5752				bubbleType :
5753				special.bindType || type;
5754
5755			// jQuery handler
5756			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] &&
5757				jQuery._data( cur, "handle" );
5758
5759			if ( handle ) {
5760				handle.apply( cur, data );
5761			}
5762
5763			// Native handler
5764			handle = ontype && cur[ ontype ];
5765			if ( handle && handle.apply && acceptData( cur ) ) {
5766				event.result = handle.apply( cur, data );
5767				if ( event.result === false ) {
5768					event.preventDefault();
5769				}
5770			}
5771		}
5772		event.type = type;
5773
5774		// If nobody prevented the default action, do it now
5775		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
5776
5777			if (
5778				( !special._default ||
5779				 special._default.apply( eventPath.pop(), data ) === false
5780				) && acceptData( elem )
5781			) {
5782
5783				// Call a native DOM method on the target with the same name name as the event.
5784				// Can't use an .isFunction() check here because IE6/7 fails that test.
5785				// Don't do default actions on window, that's where global variables be (#6170)
5786				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
5787
5788					// Don't re-trigger an onFOO event when we call its FOO() method
5789					tmp = elem[ ontype ];
5790
5791					if ( tmp ) {
5792						elem[ ontype ] = null;
5793					}
5794
5795					// Prevent re-triggering of the same event, since we already bubbled it above
5796					jQuery.event.triggered = type;
5797					try {
5798						elem[ type ]();
5799					} catch ( e ) {
5800
5801						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
5802						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
5803					}
5804					jQuery.event.triggered = undefined;
5805
5806					if ( tmp ) {
5807						elem[ ontype ] = tmp;
5808					}
5809				}
5810			}
5811		}
5812
5813		return event.result;
5814	},
5815
5816	dispatch: function( event ) {
5817
5818		// Make a writable jQuery.Event from the native event object
5819		event = jQuery.event.fix( event );
5820
5821		var i, j, ret, matched, handleObj,
5822			handlerQueue = [],
5823			args = slice.call( arguments ),
5824			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
5825			special = jQuery.event.special[ event.type ] || {};
5826
5827		// Use the fix-ed jQuery.Event rather than the (read-only) native event
5828		args[ 0 ] = event;
5829		event.delegateTarget = this;
5830
5831		// Call the preDispatch hook for the mapped type, and let it bail if desired
5832		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
5833			return;
5834		}
5835
5836		// Determine handlers
5837		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
5838
5839		// Run delegates first; they may want to stop propagation beneath us
5840		i = 0;
5841		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
5842			event.currentTarget = matched.elem;
5843
5844			j = 0;
5845			while ( ( handleObj = matched.handlers[ j++ ] ) &&
5846				!event.isImmediatePropagationStopped() ) {
5847
5848				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
5849				// a subset or equal to those in the bound event (both can have no namespace).
5850				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
5851
5852					event.handleObj = handleObj;
5853					event.data = handleObj.data;
5854
5855					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
5856						handleObj.handler ).apply( matched.elem, args );
5857
5858					if ( ret !== undefined ) {
5859						if ( ( event.result = ret ) === false ) {
5860							event.preventDefault();
5861							event.stopPropagation();
5862						}
5863					}
5864				}
5865			}
5866		}
5867
5868		// Call the postDispatch hook for the mapped type
5869		if ( special.postDispatch ) {
5870			special.postDispatch.call( this, event );
5871		}
5872
5873		return event.result;
5874	},
5875
5876	handlers: function( event, handlers ) {
5877		var i, matches, sel, handleObj,
5878			handlerQueue = [],
5879			delegateCount = handlers.delegateCount,
5880			cur = event.target;
5881
5882		// Support (at least): Chrome, IE9
5883		// Find delegate handlers
5884		// Black-hole SVG <use> instance trees (#13180)
5885		//
5886		// Support: Firefox<=42+
5887		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
5888		if ( delegateCount && cur.nodeType &&
5889			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
5890
5891			/* jshint eqeqeq: false */
5892			for ( ; cur != this; cur = cur.parentNode || this ) {
5893				/* jshint eqeqeq: true */
5894
5895				// Don't check non-elements (#13208)
5896				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5897				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
5898					matches = [];
5899					for ( i = 0; i < delegateCount; i++ ) {
5900						handleObj = handlers[ i ];
5901
5902						// Don't conflict with Object.prototype properties (#13203)
5903						sel = handleObj.selector + " ";
5904
5905						if ( matches[ sel ] === undefined ) {
5906							matches[ sel ] = handleObj.needsContext ?
5907								jQuery( sel, this ).index( cur ) > -1 :
5908								jQuery.find( sel, this, null, [ cur ] ).length;
5909						}
5910						if ( matches[ sel ] ) {
5911							matches.push( handleObj );
5912						}
5913					}
5914					if ( matches.length ) {
5915						handlerQueue.push( { elem: cur, handlers: matches } );
5916					}
5917				}
5918			}
5919		}
5920
5921		// Add the remaining (directly-bound) handlers
5922		if ( delegateCount < handlers.length ) {
5923			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
5924		}
5925
5926		return handlerQueue;
5927	},
5928
5929	fix: function( event ) {
5930		if ( event[ jQuery.expando ] ) {
5931			return event;
5932		}
5933
5934		// Create a writable copy of the event object and normalize some properties
5935		var i, prop, copy,
5936			type = event.type,
5937			originalEvent = event,
5938			fixHook = this.fixHooks[ type ];
5939
5940		if ( !fixHook ) {
5941			this.fixHooks[ type ] = fixHook =
5942				rmouseEvent.test( type ) ? this.mouseHooks :
5943				rkeyEvent.test( type ) ? this.keyHooks :
5944				{};
5945		}
5946		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
5947
5948		event = new jQuery.Event( originalEvent );
5949
5950		i = copy.length;
5951		while ( i-- ) {
5952			prop = copy[ i ];
5953			event[ prop ] = originalEvent[ prop ];
5954		}
5955
5956		// Support: IE<9
5957		// Fix target property (#1925)
5958		if ( !event.target ) {
5959			event.target = originalEvent.srcElement || document;
5960		}
5961
5962		// Support: Safari 6-8+
5963		// Target should not be a text node (#504, #13143)
5964		if ( event.target.nodeType === 3 ) {
5965			event.target = event.target.parentNode;
5966		}
5967
5968		// Support: IE<9
5969		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
5970		event.metaKey = !!event.metaKey;
5971
5972		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
5973	},
5974
5975	// Includes some event props shared by KeyEvent and MouseEvent
5976	props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
5977		"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
5978
5979	fixHooks: {},
5980
5981	keyHooks: {
5982		props: "char charCode key keyCode".split( " " ),
5983		filter: function( event, original ) {
5984
5985			// Add which for key events
5986			if ( event.which == null ) {
5987				event.which = original.charCode != null ? original.charCode : original.keyCode;
5988			}
5989
5990			return event;
5991		}
5992	},
5993
5994	mouseHooks: {
5995		props: ( "button buttons clientX clientY fromElement offsetX offsetY " +
5996			"pageX pageY screenX screenY toElement" ).split( " " ),
5997		filter: function( event, original ) {
5998			var body, eventDoc, doc,
5999				button = original.button,
6000				fromElement = original.fromElement;
6001
6002			// Calculate pageX/Y if missing and clientX/Y available
6003			if ( event.pageX == null && original.clientX != null ) {
6004				eventDoc = event.target.ownerDocument || document;
6005				doc = eventDoc.documentElement;
6006				body = eventDoc.body;
6007
6008				event.pageX = original.clientX +
6009					( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
6010					( doc && doc.clientLeft || body && body.clientLeft || 0 );
6011				event.pageY = original.clientY +
6012					( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
6013					( doc && doc.clientTop  || body && body.clientTop  || 0 );
6014			}
6015
6016			// Add relatedTarget, if necessary
6017			if ( !event.relatedTarget && fromElement ) {
6018				event.relatedTarget = fromElement === event.target ?
6019					original.toElement :
6020					fromElement;
6021			}
6022
6023			// Add which for click: 1 === left; 2 === middle; 3 === right
6024			// Note: button is not normalized, so don't use it
6025			if ( !event.which && button !== undefined ) {
6026				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
6027			}
6028
6029			return event;
6030		}
6031	},
6032
6033	special: {
6034		load: {
6035
6036			// Prevent triggered image.load events from bubbling to window.load
6037			noBubble: true
6038		},
6039		focus: {
6040
6041			// Fire native event if possible so blur/focus sequence is correct
6042			trigger: function() {
6043				if ( this !== safeActiveElement() && this.focus ) {
6044					try {
6045						this.focus();
6046						return false;
6047					} catch ( e ) {
6048
6049						// Support: IE<9
6050						// If we error on focus to hidden element (#1486, #12518),
6051						// let .trigger() run the handlers
6052					}
6053				}
6054			},
6055			delegateType: "focusin"
6056		},
6057		blur: {
6058			trigger: function() {
6059				if ( this === safeActiveElement() && this.blur ) {
6060					this.blur();
6061					return false;
6062				}
6063			},
6064			delegateType: "focusout"
6065		},
6066		click: {
6067
6068			// For checkbox, fire native event so checked state will be right
6069			trigger: function() {
6070				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
6071					this.click();
6072					return false;
6073				}
6074			},
6075
6076			// For cross-browser consistency, don't fire native .click() on links
6077			_default: function( event ) {
6078				return jQuery.nodeName( event.target, "a" );
6079			}
6080		},
6081
6082		beforeunload: {
6083			postDispatch: function( event ) {
6084
6085				// Support: Firefox 20+
6086				// Firefox doesn't alert if the returnValue field is not set.
6087				if ( event.result !== undefined && event.originalEvent ) {
6088					event.originalEvent.returnValue = event.result;
6089				}
6090			}
6091		}
6092	},
6093
6094	// Piggyback on a donor event to simulate a different one
6095	simulate: function( type, elem, event ) {
6096		var e = jQuery.extend(
6097			new jQuery.Event(),
6098			event,
6099			{
6100				type: type,
6101				isSimulated: true
6102
6103				// Previously, `originalEvent: {}` was set here, so stopPropagation call
6104				// would not be triggered on donor event, since in our own
6105				// jQuery.event.stopPropagation function we had a check for existence of
6106				// originalEvent.stopPropagation method, so, consequently it would be a noop.
6107				//
6108				// Guard for simulated events was moved to jQuery.event.stopPropagation function
6109				// since `originalEvent` should point to the original event for the
6110				// constancy with other events and for more focused logic
6111			}
6112		);
6113
6114		jQuery.event.trigger( e, null, elem );
6115
6116		if ( e.isDefaultPrevented() ) {
6117			event.preventDefault();
6118		}
6119	}
6120};
6121
6122jQuery.removeEvent = document.removeEventListener ?
6123	function( elem, type, handle ) {
6124
6125		// This "if" is needed for plain objects
6126		if ( elem.removeEventListener ) {
6127			elem.removeEventListener( type, handle );
6128		}
6129	} :
6130	function( elem, type, handle ) {
6131		var name = "on" + type;
6132
6133		if ( elem.detachEvent ) {
6134
6135			// #8545, #7054, preventing memory leaks for custom events in IE6-8
6136			// detachEvent needed property on element, by name of that event,
6137			// to properly expose it to GC
6138			if ( typeof elem[ name ] === "undefined" ) {
6139				elem[ name ] = null;
6140			}
6141
6142			elem.detachEvent( name, handle );
6143		}
6144	};
6145
6146jQuery.Event = function( src, props ) {
6147
6148	// Allow instantiation without the 'new' keyword
6149	if ( !( this instanceof jQuery.Event ) ) {
6150		return new jQuery.Event( src, props );
6151	}
6152
6153	// Event object
6154	if ( src && src.type ) {
6155		this.originalEvent = src;
6156		this.type = src.type;
6157
6158		// Events bubbling up the document may have been marked as prevented
6159		// by a handler lower down the tree; reflect the correct value.
6160		this.isDefaultPrevented = src.defaultPrevented ||
6161				src.defaultPrevented === undefined &&
6162
6163				// Support: IE < 9, Android < 4.0
6164				src.returnValue === false ?
6165			returnTrue :
6166			returnFalse;
6167
6168	// Event type
6169	} else {
6170		this.type = src;
6171	}
6172
6173	// Put explicitly provided properties onto the event object
6174	if ( props ) {
6175		jQuery.extend( this, props );
6176	}
6177
6178	// Create a timestamp if incoming event doesn't have one
6179	this.timeStamp = src && src.timeStamp || jQuery.now();
6180
6181	// Mark it as fixed
6182	this[ jQuery.expando ] = true;
6183};
6184
6185// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
6186// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
6187jQuery.Event.prototype = {
6188	constructor: jQuery.Event,
6189	isDefaultPrevented: returnFalse,
6190	isPropagationStopped: returnFalse,
6191	isImmediatePropagationStopped: returnFalse,
6192
6193	preventDefault: function() {
6194		var e = this.originalEvent;
6195
6196		this.isDefaultPrevented = returnTrue;
6197		if ( !e ) {
6198			return;
6199		}
6200
6201		// If preventDefault exists, run it on the original event
6202		if ( e.preventDefault ) {
6203			e.preventDefault();
6204
6205		// Support: IE
6206		// Otherwise set the returnValue property of the original event to false
6207		} else {
6208			e.returnValue = false;
6209		}
6210	},
6211	stopPropagation: function() {
6212		var e = this.originalEvent;
6213
6214		this.isPropagationStopped = returnTrue;
6215
6216		if ( !e || this.isSimulated ) {
6217			return;
6218		}
6219
6220		// If stopPropagation exists, run it on the original event
6221		if ( e.stopPropagation ) {
6222			e.stopPropagation();
6223		}
6224
6225		// Support: IE
6226		// Set the cancelBubble property of the original event to true
6227		e.cancelBubble = true;
6228	},
6229	stopImmediatePropagation: function() {
6230		var e = this.originalEvent;
6231
6232		this.isImmediatePropagationStopped = returnTrue;
6233
6234		if ( e && e.stopImmediatePropagation ) {
6235			e.stopImmediatePropagation();
6236		}
6237
6238		this.stopPropagation();
6239	}
6240};
6241
6242// Create mouseenter/leave events using mouseover/out and event-time checks
6243// so that event delegation works in jQuery.
6244// Do the same for pointerenter/pointerleave and pointerover/pointerout
6245//
6246// Support: Safari 7 only
6247// Safari sends mouseenter too often; see:
6248// https://code.google.com/p/chromium/issues/detail?id=470258
6249// for the description of the bug (it existed in older Chrome versions as well).
6250jQuery.each( {
6251	mouseenter: "mouseover",
6252	mouseleave: "mouseout",
6253	pointerenter: "pointerover",
6254	pointerleave: "pointerout"
6255}, function( orig, fix ) {
6256	jQuery.event.special[ orig ] = {
6257		delegateType: fix,
6258		bindType: fix,
6259
6260		handle: function( event ) {
6261			var ret,
6262				target = this,
6263				related = event.relatedTarget,
6264				handleObj = event.handleObj;
6265
6266			// For mouseenter/leave call the handler if related is outside the target.
6267			// NB: No relatedTarget if the mouse left/entered the browser window
6268			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
6269				event.type = handleObj.origType;
6270				ret = handleObj.handler.apply( this, arguments );
6271				event.type = fix;
6272			}
6273			return ret;
6274		}
6275	};
6276} );
6277
6278// IE submit delegation
6279if ( !support.submit ) {
6280
6281	jQuery.event.special.submit = {
6282		setup: function() {
6283
6284			// Only need this for delegated form submit events
6285			if ( jQuery.nodeName( this, "form" ) ) {
6286				return false;
6287			}
6288
6289			// Lazy-add a submit handler when a descendant form may potentially be submitted
6290			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
6291
6292				// Node name check avoids a VML-related crash in IE (#9807)
6293				var elem = e.target,
6294					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ?
6295
6296						// Support: IE <=8
6297						// We use jQuery.prop instead of elem.form
6298						// to allow fixing the IE8 delegated submit issue (gh-2332)
6299						// by 3rd party polyfills/workarounds.
6300						jQuery.prop( elem, "form" ) :
6301						undefined;
6302
6303				if ( form && !jQuery._data( form, "submit" ) ) {
6304					jQuery.event.add( form, "submit._submit", function( event ) {
6305						event._submitBubble = true;
6306					} );
6307					jQuery._data( form, "submit", true );
6308				}
6309			} );
6310
6311			// return undefined since we don't need an event listener
6312		},
6313
6314		postDispatch: function( event ) {
6315
6316			// If form was submitted by the user, bubble the event up the tree
6317			if ( event._submitBubble ) {
6318				delete event._submitBubble;
6319				if ( this.parentNode && !event.isTrigger ) {
6320					jQuery.event.simulate( "submit", this.parentNode, event );
6321				}
6322			}
6323		},
6324
6325		teardown: function() {
6326
6327			// Only need this for delegated form submit events
6328			if ( jQuery.nodeName( this, "form" ) ) {
6329				return false;
6330			}
6331
6332			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
6333			jQuery.event.remove( this, "._submit" );
6334		}
6335	};
6336}
6337
6338// IE change delegation and checkbox/radio fix
6339if ( !support.change ) {
6340
6341	jQuery.event.special.change = {
6342
6343		setup: function() {
6344
6345			if ( rformElems.test( this.nodeName ) ) {
6346
6347				// IE doesn't fire change on a check/radio until blur; trigger it on click
6348				// after a propertychange. Eat the blur-change in special.change.handle.
6349				// This still fires onchange a second time for check/radio after blur.
6350				if ( this.type === "checkbox" || this.type === "radio" ) {
6351					jQuery.event.add( this, "propertychange._change", function( event ) {
6352						if ( event.originalEvent.propertyName === "checked" ) {
6353							this._justChanged = true;
6354						}
6355					} );
6356					jQuery.event.add( this, "click._change", function( event ) {
6357						if ( this._justChanged && !event.isTrigger ) {
6358							this._justChanged = false;
6359						}
6360
6361						// Allow triggered, simulated change events (#11500)
6362						jQuery.event.simulate( "change", this, event );
6363					} );
6364				}
6365				return false;
6366			}
6367
6368			// Delegated event; lazy-add a change handler on descendant inputs
6369			jQuery.event.add( this, "beforeactivate._change", function( e ) {
6370				var elem = e.target;
6371
6372				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) {
6373					jQuery.event.add( elem, "change._change", function( event ) {
6374						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
6375							jQuery.event.simulate( "change", this.parentNode, event );
6376						}
6377					} );
6378					jQuery._data( elem, "change", true );
6379				}
6380			} );
6381		},
6382
6383		handle: function( event ) {
6384			var elem = event.target;
6385
6386			// Swallow native change events from checkbox/radio, we already triggered them above
6387			if ( this !== elem || event.isSimulated || event.isTrigger ||
6388				( elem.type !== "radio" && elem.type !== "checkbox" ) ) {
6389
6390				return event.handleObj.handler.apply( this, arguments );
6391			}
6392		},
6393
6394		teardown: function() {
6395			jQuery.event.remove( this, "._change" );
6396
6397			return !rformElems.test( this.nodeName );
6398		}
6399	};
6400}
6401
6402// Support: Firefox
6403// Firefox doesn't have focus(in | out) events
6404// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
6405//
6406// Support: Chrome, Safari
6407// focus(in | out) events fire after focus & blur events,
6408// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
6409// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
6410if ( !support.focusin ) {
6411	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
6412
6413		// Attach a single capturing handler on the document while someone wants focusin/focusout
6414		var handler = function( event ) {
6415			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
6416		};
6417
6418		jQuery.event.special[ fix ] = {
6419			setup: function() {
6420				var doc = this.ownerDocument || this,
6421					attaches = jQuery._data( doc, fix );
6422
6423				if ( !attaches ) {
6424					doc.addEventListener( orig, handler, true );
6425				}
6426				jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
6427			},
6428			teardown: function() {
6429				var doc = this.ownerDocument || this,
6430					attaches = jQuery._data( doc, fix ) - 1;
6431
6432				if ( !attaches ) {
6433					doc.removeEventListener( orig, handler, true );
6434					jQuery._removeData( doc, fix );
6435				} else {
6436					jQuery._data( doc, fix, attaches );
6437				}
6438			}
6439		};
6440	} );
6441}
6442
6443jQuery.fn.extend( {
6444
6445	on: function( types, selector, data, fn ) {
6446		return on( this, types, selector, data, fn );
6447	},
6448	one: function( types, selector, data, fn ) {
6449		return on( this, types, selector, data, fn, 1 );
6450	},
6451	off: function( types, selector, fn ) {
6452		var handleObj, type;
6453		if ( types && types.preventDefault && types.handleObj ) {
6454
6455			// ( event )  dispatched jQuery.Event
6456			handleObj = types.handleObj;
6457			jQuery( types.delegateTarget ).off(
6458				handleObj.namespace ?
6459					handleObj.origType + "." + handleObj.namespace :
6460					handleObj.origType,
6461				handleObj.selector,
6462				handleObj.handler
6463			);
6464			return this;
6465		}
6466		if ( typeof types === "object" ) {
6467
6468			// ( types-object [, selector] )
6469			for ( type in types ) {
6470				this.off( type, selector, types[ type ] );
6471			}
6472			return this;
6473		}
6474		if ( selector === false || typeof selector === "function" ) {
6475
6476			// ( types [, fn] )
6477			fn = selector;
6478			selector = undefined;
6479		}
6480		if ( fn === false ) {
6481			fn = returnFalse;
6482		}
6483		return this.each( function() {
6484			jQuery.event.remove( this, types, fn, selector );
6485		} );
6486	},
6487
6488	trigger: function( type, data ) {
6489		return this.each( function() {
6490			jQuery.event.trigger( type, data, this );
6491		} );
6492	},
6493	triggerHandler: function( type, data ) {
6494		var elem = this[ 0 ];
6495		if ( elem ) {
6496			return jQuery.event.trigger( type, data, elem, true );
6497		}
6498	}
6499} );
6500
6501
6502var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
6503	rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ),
6504	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
6505
6506	// Support: IE 10-11, Edge 10240+
6507	// In IE/Edge using regex groups here causes severe slowdowns.
6508	// See https://connect.microsoft.com/IE/feedback/details/1736512/
6509	rnoInnerhtml = /<script|<style|<link/i,
6510
6511	// checked="checked" or checked
6512	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
6513	rscriptTypeMasked = /^true\/(.*)/,
6514	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
6515	safeFragment = createSafeFragment( document ),
6516	fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) );
6517
6518// Support: IE<8
6519// Manipulating tables requires a tbody
6520function manipulationTarget( elem, content ) {
6521	return jQuery.nodeName( elem, "table" ) &&
6522		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
6523
6524		elem.getElementsByTagName( "tbody" )[ 0 ] ||
6525			elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
6526		elem;
6527}
6528
6529// Replace/restore the type attribute of script elements for safe DOM manipulation
6530function disableScript( elem ) {
6531	elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type;
6532	return elem;
6533}
6534function restoreScript( elem ) {
6535	var match = rscriptTypeMasked.exec( elem.type );
6536	if ( match ) {
6537		elem.type = match[ 1 ];
6538	} else {
6539		elem.removeAttribute( "type" );
6540	}
6541	return elem;
6542}
6543
6544function cloneCopyEvent( src, dest ) {
6545	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
6546		return;
6547	}
6548
6549	var type, i, l,
6550		oldData = jQuery._data( src ),
6551		curData = jQuery._data( dest, oldData ),
6552		events = oldData.events;
6553
6554	if ( events ) {
6555		delete curData.handle;
6556		curData.events = {};
6557
6558		for ( type in events ) {
6559			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
6560				jQuery.event.add( dest, type, events[ type ][ i ] );
6561			}
6562		}
6563	}
6564
6565	// make the cloned public data object a copy from the original
6566	if ( curData.data ) {
6567		curData.data = jQuery.extend( {}, curData.data );
6568	}
6569}
6570
6571function fixCloneNodeIssues( src, dest ) {
6572	var nodeName, e, data;
6573
6574	// We do not need to do anything for non-Elements
6575	if ( dest.nodeType !== 1 ) {
6576		return;
6577	}
6578
6579	nodeName = dest.nodeName.toLowerCase();
6580
6581	// IE6-8 copies events bound via attachEvent when using cloneNode.
6582	if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
6583		data = jQuery._data( dest );
6584
6585		for ( e in data.events ) {
6586			jQuery.removeEvent( dest, e, data.handle );
6587		}
6588
6589		// Event data gets referenced instead of copied if the expando gets copied too
6590		dest.removeAttribute( jQuery.expando );
6591	}
6592
6593	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
6594	if ( nodeName === "script" && dest.text !== src.text ) {
6595		disableScript( dest ).text = src.text;
6596		restoreScript( dest );
6597
6598	// IE6-10 improperly clones children of object elements using classid.
6599	// IE10 throws NoModificationAllowedError if parent is null, #12132.
6600	} else if ( nodeName === "object" ) {
6601		if ( dest.parentNode ) {
6602			dest.outerHTML = src.outerHTML;
6603		}
6604
6605		// This path appears unavoidable for IE9. When cloning an object
6606		// element in IE9, the outerHTML strategy above is not sufficient.
6607		// If the src has innerHTML and the destination does not,
6608		// copy the src.innerHTML into the dest.innerHTML. #10324
6609		if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {
6610			dest.innerHTML = src.innerHTML;
6611		}
6612
6613	} else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
6614
6615		// IE6-8 fails to persist the checked state of a cloned checkbox
6616		// or radio button. Worse, IE6-7 fail to give the cloned element
6617		// a checked appearance if the defaultChecked value isn't also set
6618
6619		dest.defaultChecked = dest.checked = src.checked;
6620
6621		// IE6-7 get confused and end up setting the value of a cloned
6622		// checkbox/radio button to an empty string instead of "on"
6623		if ( dest.value !== src.value ) {
6624			dest.value = src.value;
6625		}
6626
6627	// IE6-8 fails to return the selected option to the default selected
6628	// state when cloning options
6629	} else if ( nodeName === "option" ) {
6630		dest.defaultSelected = dest.selected = src.defaultSelected;
6631
6632	// IE6-8 fails to set the defaultValue to the correct value when
6633	// cloning other types of input fields
6634	} else if ( nodeName === "input" || nodeName === "textarea" ) {
6635		dest.defaultValue = src.defaultValue;
6636	}
6637}
6638
6639function domManip( collection, args, callback, ignored ) {
6640
6641	// Flatten any nested arrays
6642	args = concat.apply( [], args );
6643
6644	var first, node, hasScripts,
6645		scripts, doc, fragment,
6646		i = 0,
6647		l = collection.length,
6648		iNoClone = l - 1,
6649		value = args[ 0 ],
6650		isFunction = jQuery.isFunction( value );
6651
6652	// We can't cloneNode fragments that contain checked, in WebKit
6653	if ( isFunction ||
6654			( l > 1 && typeof value === "string" &&
6655				!support.checkClone && rchecked.test( value ) ) ) {
6656		return collection.each( function( index ) {
6657			var self = collection.eq( index );
6658			if ( isFunction ) {
6659				args[ 0 ] = value.call( this, index, self.html() );
6660			}
6661			domManip( self, args, callback, ignored );
6662		} );
6663	}
6664
6665	if ( l ) {
6666		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
6667		first = fragment.firstChild;
6668
6669		if ( fragment.childNodes.length === 1 ) {
6670			fragment = first;
6671		}
6672
6673		// Require either new content or an interest in ignored elements to invoke the callback
6674		if ( first || ignored ) {
6675			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
6676			hasScripts = scripts.length;
6677
6678			// Use the original fragment for the last item
6679			// instead of the first because it can end up
6680			// being emptied incorrectly in certain situations (#8070).
6681			for ( ; i < l; i++ ) {
6682				node = fragment;
6683
6684				if ( i !== iNoClone ) {
6685					node = jQuery.clone( node, true, true );
6686
6687					// Keep references to cloned scripts for later restoration
6688					if ( hasScripts ) {
6689
6690						// Support: Android<4.1, PhantomJS<2
6691						// push.apply(_, arraylike) throws on ancient WebKit
6692						jQuery.merge( scripts, getAll( node, "script" ) );
6693					}
6694				}
6695
6696				callback.call( collection[ i ], node, i );
6697			}
6698
6699			if ( hasScripts ) {
6700				doc = scripts[ scripts.length - 1 ].ownerDocument;
6701
6702				// Reenable scripts
6703				jQuery.map( scripts, restoreScript );
6704
6705				// Evaluate executable scripts on first document insertion
6706				for ( i = 0; i < hasScripts; i++ ) {
6707					node = scripts[ i ];
6708					if ( rscriptType.test( node.type || "" ) &&
6709						!jQuery._data( node, "globalEval" ) &&
6710						jQuery.contains( doc, node ) ) {
6711
6712						if ( node.src ) {
6713
6714							// Optional AJAX dependency, but won't run scripts if not present
6715							if ( jQuery._evalUrl ) {
6716								jQuery._evalUrl( node.src );
6717							}
6718						} else {
6719							jQuery.globalEval(
6720								( node.text || node.textContent || node.innerHTML || "" )
6721									.replace( rcleanScript, "" )
6722							);
6723						}
6724					}
6725				}
6726			}
6727
6728			// Fix #11809: Avoid leaking memory
6729			fragment = first = null;
6730		}
6731	}
6732
6733	return collection;
6734}
6735
6736function remove( elem, selector, keepData ) {
6737	var node,
6738		elems = selector ? jQuery.filter( selector, elem ) : elem,
6739		i = 0;
6740
6741	for ( ; ( node = elems[ i ] ) != null; i++ ) {
6742
6743		if ( !keepData && node.nodeType === 1 ) {
6744			jQuery.cleanData( getAll( node ) );
6745		}
6746
6747		if ( node.parentNode ) {
6748			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
6749				setGlobalEval( getAll( node, "script" ) );
6750			}
6751			node.parentNode.removeChild( node );
6752		}
6753	}
6754
6755	return elem;
6756}
6757
6758jQuery.extend( {
6759	htmlPrefilter: function( html ) {
6760		return html.replace( rxhtmlTag, "<$1></$2>" );
6761	},
6762
6763	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
6764		var destElements, node, clone, i, srcElements,
6765			inPage = jQuery.contains( elem.ownerDocument, elem );
6766
6767		if ( support.html5Clone || jQuery.isXMLDoc( elem ) ||
6768			!rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
6769
6770			clone = elem.cloneNode( true );
6771
6772		// IE<=8 does not properly clone detached, unknown element nodes
6773		} else {
6774			fragmentDiv.innerHTML = elem.outerHTML;
6775			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
6776		}
6777
6778		if ( ( !support.noCloneEvent || !support.noCloneChecked ) &&
6779				( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {
6780
6781			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
6782			destElements = getAll( clone );
6783			srcElements = getAll( elem );
6784
6785			// Fix all IE cloning issues
6786			for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {
6787
6788				// Ensure that the destination node is not null; Fixes #9587
6789				if ( destElements[ i ] ) {
6790					fixCloneNodeIssues( node, destElements[ i ] );
6791				}
6792			}
6793		}
6794
6795		// Copy the events from the original to the clone
6796		if ( dataAndEvents ) {
6797			if ( deepDataAndEvents ) {
6798				srcElements = srcElements || getAll( elem );
6799				destElements = destElements || getAll( clone );
6800
6801				for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {
6802					cloneCopyEvent( node, destElements[ i ] );
6803				}
6804			} else {
6805				cloneCopyEvent( elem, clone );
6806			}
6807		}
6808
6809		// Preserve script evaluation history
6810		destElements = getAll( clone, "script" );
6811		if ( destElements.length > 0 ) {
6812			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
6813		}
6814
6815		destElements = srcElements = node = null;
6816
6817		// Return the cloned set
6818		return clone;
6819	},
6820
6821	cleanData: function( elems, /* internal */ forceAcceptData ) {
6822		var elem, type, id, data,
6823			i = 0,
6824			internalKey = jQuery.expando,
6825			cache = jQuery.cache,
6826			attributes = support.attributes,
6827			special = jQuery.event.special;
6828
6829		for ( ; ( elem = elems[ i ] ) != null; i++ ) {
6830			if ( forceAcceptData || acceptData( elem ) ) {
6831
6832				id = elem[ internalKey ];
6833				data = id && cache[ id ];
6834
6835				if ( data ) {
6836					if ( data.events ) {
6837						for ( type in data.events ) {
6838							if ( special[ type ] ) {
6839								jQuery.event.remove( elem, type );
6840
6841							// This is a shortcut to avoid jQuery.event.remove's overhead
6842							} else {
6843								jQuery.removeEvent( elem, type, data.handle );
6844							}
6845						}
6846					}
6847
6848					// Remove cache only if it was not already removed by jQuery.event.remove
6849					if ( cache[ id ] ) {
6850
6851						delete cache[ id ];
6852
6853						// Support: IE<9
6854						// IE does not allow us to delete expando properties from nodes
6855						// IE creates expando attributes along with the property
6856						// IE does not have a removeAttribute function on Document nodes
6857						if ( !attributes && typeof elem.removeAttribute !== "undefined" ) {
6858							elem.removeAttribute( internalKey );
6859
6860						// Webkit & Blink performance suffers when deleting properties
6861						// from DOM nodes, so set to undefined instead
6862						// https://code.google.com/p/chromium/issues/detail?id=378607
6863						} else {
6864							elem[ internalKey ] = undefined;
6865						}
6866
6867						deletedIds.push( id );
6868					}
6869				}
6870			}
6871		}
6872	}
6873} );
6874
6875jQuery.fn.extend( {
6876
6877	// Keep domManip exposed until 3.0 (gh-2225)
6878	domManip: domManip,
6879
6880	detach: function( selector ) {
6881		return remove( this, selector, true );
6882	},
6883
6884	remove: function( selector ) {
6885		return remove( this, selector );
6886	},
6887
6888	text: function( value ) {
6889		return access( this, function( value ) {
6890			return value === undefined ?
6891				jQuery.text( this ) :
6892				this.empty().append(
6893					( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )
6894				);
6895		}, null, value, arguments.length );
6896	},
6897
6898	append: function() {
6899		return domManip( this, arguments, function( elem ) {
6900			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6901				var target = manipulationTarget( this, elem );
6902				target.appendChild( elem );
6903			}
6904		} );
6905	},
6906
6907	prepend: function() {
6908		return domManip( this, arguments, function( elem ) {
6909			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6910				var target = manipulationTarget( this, elem );
6911				target.insertBefore( elem, target.firstChild );
6912			}
6913		} );
6914	},
6915
6916	before: function() {
6917		return domManip( this, arguments, function( elem ) {
6918			if ( this.parentNode ) {
6919				this.parentNode.insertBefore( elem, this );
6920			}
6921		} );
6922	},
6923
6924	after: function() {
6925		return domManip( this, arguments, function( elem ) {
6926			if ( this.parentNode ) {
6927				this.parentNode.insertBefore( elem, this.nextSibling );
6928			}
6929		} );
6930	},
6931
6932	empty: function() {
6933		var elem,
6934			i = 0;
6935
6936		for ( ; ( elem = this[ i ] ) != null; i++ ) {
6937
6938			// Remove element nodes and prevent memory leaks
6939			if ( elem.nodeType === 1 ) {
6940				jQuery.cleanData( getAll( elem, false ) );
6941			}
6942
6943			// Remove any remaining nodes
6944			while ( elem.firstChild ) {
6945				elem.removeChild( elem.firstChild );
6946			}
6947
6948			// If this is a select, ensure that it displays empty (#12336)
6949			// Support: IE<9
6950			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
6951				elem.options.length = 0;
6952			}
6953		}
6954
6955		return this;
6956	},
6957
6958	clone: function( dataAndEvents, deepDataAndEvents ) {
6959		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
6960		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
6961
6962		return this.map( function() {
6963			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
6964		} );
6965	},
6966
6967	html: function( value ) {
6968		return access( this, function( value ) {
6969			var elem = this[ 0 ] || {},
6970				i = 0,
6971				l = this.length;
6972
6973			if ( value === undefined ) {
6974				return elem.nodeType === 1 ?
6975					elem.innerHTML.replace( rinlinejQuery, "" ) :
6976					undefined;
6977			}
6978
6979			// See if we can take a shortcut and just use innerHTML
6980			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
6981				( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
6982				( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
6983				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
6984
6985				value = jQuery.htmlPrefilter( value );
6986
6987				try {
6988					for ( ; i < l; i++ ) {
6989
6990						// Remove element nodes and prevent memory leaks
6991						elem = this[ i ] || {};
6992						if ( elem.nodeType === 1 ) {
6993							jQuery.cleanData( getAll( elem, false ) );
6994							elem.innerHTML = value;
6995						}
6996					}
6997
6998					elem = 0;
6999
7000				// If using innerHTML throws an exception, use the fallback method
7001				} catch ( e ) {}
7002			}
7003
7004			if ( elem ) {
7005				this.empty().append( value );
7006			}
7007		}, null, value, arguments.length );
7008	},
7009
7010	replaceWith: function() {
7011		var ignored = [];
7012
7013		// Make the changes, replacing each non-ignored context element with the new content
7014		return domManip( this, arguments, function( elem ) {
7015			var parent = this.parentNode;
7016
7017			if ( jQuery.inArray( this, ignored ) < 0 ) {
7018				jQuery.cleanData( getAll( this ) );
7019				if ( parent ) {
7020					parent.replaceChild( elem, this );
7021				}
7022			}
7023
7024		// Force callback invocation
7025		}, ignored );
7026	}
7027} );
7028
7029jQuery.each( {
7030	appendTo: "append",
7031	prependTo: "prepend",
7032	insertBefore: "before",
7033	insertAfter: "after",
7034	replaceAll: "replaceWith"
7035}, function( name, original ) {
7036	jQuery.fn[ name ] = function( selector ) {
7037		var elems,
7038			i = 0,
7039			ret = [],
7040			insert = jQuery( selector ),
7041			last = insert.length - 1;
7042
7043		for ( ; i <= last; i++ ) {
7044			elems = i === last ? this : this.clone( true );
7045			jQuery( insert[ i ] )[ original ]( elems );
7046
7047			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
7048			push.apply( ret, elems.get() );
7049		}
7050
7051		return this.pushStack( ret );
7052	};
7053} );
7054
7055
7056var iframe,
7057	elemdisplay = {
7058
7059		// Support: Firefox
7060		// We have to pre-define these values for FF (#10227)
7061		HTML: "block",
7062		BODY: "block"
7063	};
7064
7065/**
7066 * Retrieve the actual display of a element
7067 * @param {String} name nodeName of the element
7068 * @param {Object} doc Document object
7069 */
7070
7071// Called only from within defaultDisplay
7072function actualDisplay( name, doc ) {
7073	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
7074
7075		display = jQuery.css( elem[ 0 ], "display" );
7076
7077	// We don't have any data stored on the element,
7078	// so use "detach" method as fast way to get rid of the element
7079	elem.detach();
7080
7081	return display;
7082}
7083
7084/**
7085 * Try to determine the default display value of an element
7086 * @param {String} nodeName
7087 */
7088function defaultDisplay( nodeName ) {
7089	var doc = document,
7090		display = elemdisplay[ nodeName ];
7091
7092	if ( !display ) {
7093		display = actualDisplay( nodeName, doc );
7094
7095		// If the simple way fails, read from inside an iframe
7096		if ( display === "none" || !display ) {
7097
7098			// Use the already-created iframe if possible
7099			iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
7100				.appendTo( doc.documentElement );
7101
7102			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
7103			doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
7104
7105			// Support: IE
7106			doc.write();
7107			doc.close();
7108
7109			display = actualDisplay( nodeName, doc );
7110			iframe.detach();
7111		}
7112
7113		// Store the correct default display
7114		elemdisplay[ nodeName ] = display;
7115	}
7116
7117	return display;
7118}
7119var rmargin = ( /^margin/ );
7120
7121var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
7122
7123var swap = function( elem, options, callback, args ) {
7124	var ret, name,
7125		old = {};
7126
7127	// Remember the old values, and insert the new ones
7128	for ( name in options ) {
7129		old[ name ] = elem.style[ name ];
7130		elem.style[ name ] = options[ name ];
7131	}
7132
7133	ret = callback.apply( elem, args || [] );
7134
7135	// Revert the old values
7136	for ( name in options ) {
7137		elem.style[ name ] = old[ name ];
7138	}
7139
7140	return ret;
7141};
7142
7143
7144var documentElement = document.documentElement;
7145
7146
7147
7148( function() {
7149	var pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,
7150		reliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,
7151		container = document.createElement( "div" ),
7152		div = document.createElement( "div" );
7153
7154	// Finish early in limited (non-browser) environments
7155	if ( !div.style ) {
7156		return;
7157	}
7158
7159	div.style.cssText = "float:left;opacity:.5";
7160
7161	// Support: IE<9
7162	// Make sure that element opacity exists (as opposed to filter)
7163	support.opacity = div.style.opacity === "0.5";
7164
7165	// Verify style float existence
7166	// (IE uses styleFloat instead of cssFloat)
7167	support.cssFloat = !!div.style.cssFloat;
7168
7169	div.style.backgroundClip = "content-box";
7170	div.cloneNode( true ).style.backgroundClip = "";
7171	support.clearCloneStyle = div.style.backgroundClip === "content-box";
7172
7173	container = document.createElement( "div" );
7174	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
7175		"padding:0;margin-top:1px;position:absolute";
7176	div.innerHTML = "";
7177	container.appendChild( div );
7178
7179	// Support: Firefox<29, Android 2.3
7180	// Vendor-prefix box-sizing
7181	support.boxSizing = div.style.boxSizing === "" || div.style.MozBoxSizing === "" ||
7182		div.style.WebkitBoxSizing === "";
7183
7184	jQuery.extend( support, {
7185		reliableHiddenOffsets: function() {
7186			if ( pixelPositionVal == null ) {
7187				computeStyleTests();
7188			}
7189			return reliableHiddenOffsetsVal;
7190		},
7191
7192		boxSizingReliable: function() {
7193
7194			// We're checking for pixelPositionVal here instead of boxSizingReliableVal
7195			// since that compresses better and they're computed together anyway.
7196			if ( pixelPositionVal == null ) {
7197				computeStyleTests();
7198			}
7199			return boxSizingReliableVal;
7200		},
7201
7202		pixelMarginRight: function() {
7203
7204			// Support: Android 4.0-4.3
7205			if ( pixelPositionVal == null ) {
7206				computeStyleTests();
7207			}
7208			return pixelMarginRightVal;
7209		},
7210
7211		pixelPosition: function() {
7212			if ( pixelPositionVal == null ) {
7213				computeStyleTests();
7214			}
7215			return pixelPositionVal;
7216		},
7217
7218		reliableMarginRight: function() {
7219
7220			// Support: Android 2.3
7221			if ( pixelPositionVal == null ) {
7222				computeStyleTests();
7223			}
7224			return reliableMarginRightVal;
7225		},
7226
7227		reliableMarginLeft: function() {
7228
7229			// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
7230			if ( pixelPositionVal == null ) {
7231				computeStyleTests();
7232			}
7233			return reliableMarginLeftVal;
7234		}
7235	} );
7236
7237	function computeStyleTests() {
7238		var contents, divStyle,
7239			documentElement = document.documentElement;
7240
7241		// Setup
7242		documentElement.appendChild( container );
7243
7244		div.style.cssText =
7245
7246			// Support: Android 2.3
7247			// Vendor-prefix box-sizing
7248			"-webkit-box-sizing:border-box;box-sizing:border-box;" +
7249			"position:relative;display:block;" +
7250			"margin:auto;border:1px;padding:1px;" +
7251			"top:1%;width:50%";
7252
7253		// Support: IE<9
7254		// Assume reasonable values in the absence of getComputedStyle
7255		pixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;
7256		pixelMarginRightVal = reliableMarginRightVal = true;
7257
7258		// Check for getComputedStyle so that this code is not run in IE<9.
7259		if ( window.getComputedStyle ) {
7260			divStyle = window.getComputedStyle( div );
7261			pixelPositionVal = ( divStyle || {} ).top !== "1%";
7262			reliableMarginLeftVal = ( divStyle || {} ).marginLeft === "2px";
7263			boxSizingReliableVal = ( divStyle || { width: "4px" } ).width === "4px";
7264
7265			// Support: Android 4.0 - 4.3 only
7266			// Some styles come back with percentage values, even though they shouldn't
7267			div.style.marginRight = "50%";
7268			pixelMarginRightVal = ( divStyle || { marginRight: "4px" } ).marginRight === "4px";
7269
7270			// Support: Android 2.3 only
7271			// Div with explicit width and no margin-right incorrectly
7272			// gets computed margin-right based on width of container (#3333)
7273			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
7274			contents = div.appendChild( document.createElement( "div" ) );
7275
7276			// Reset CSS: box-sizing; display; margin; border; padding
7277			contents.style.cssText = div.style.cssText =
7278
7279				// Support: Android 2.3
7280				// Vendor-prefix box-sizing
7281				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
7282				"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
7283			contents.style.marginRight = contents.style.width = "0";
7284			div.style.width = "1px";
7285
7286			reliableMarginRightVal =
7287				!parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );
7288
7289			div.removeChild( contents );
7290		}
7291
7292		// Support: IE6-8
7293		// First check that getClientRects works as expected
7294		// Check if table cells still have offsetWidth/Height when they are set
7295		// to display:none and there are still other visible table cells in a
7296		// table row; if so, offsetWidth/Height are not reliable for use when
7297		// determining if an element has been hidden directly using
7298		// display:none (it is still safe to use offsets if a parent element is
7299		// hidden; don safety goggles and see bug #4512 for more information).
7300		div.style.display = "none";
7301		reliableHiddenOffsetsVal = div.getClientRects().length === 0;
7302		if ( reliableHiddenOffsetsVal ) {
7303			div.style.display = "";
7304			div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
7305			div.childNodes[ 0 ].style.borderCollapse = "separate";
7306			contents = div.getElementsByTagName( "td" );
7307			contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
7308			reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
7309			if ( reliableHiddenOffsetsVal ) {
7310				contents[ 0 ].style.display = "";
7311				contents[ 1 ].style.display = "none";
7312				reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
7313			}
7314		}
7315
7316		// Teardown
7317		documentElement.removeChild( container );
7318	}
7319
7320} )();
7321
7322
7323var getStyles, curCSS,
7324	rposition = /^(top|right|bottom|left)$/;
7325
7326if ( window.getComputedStyle ) {
7327	getStyles = function( elem ) {
7328
7329		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
7330		// IE throws on elements created in popups
7331		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
7332		var view = elem.ownerDocument.defaultView;
7333
7334		if ( !view || !view.opener ) {
7335			view = window;
7336		}
7337
7338		return view.getComputedStyle( elem );
7339	};
7340
7341	curCSS = function( elem, name, computed ) {
7342		var width, minWidth, maxWidth, ret,
7343			style = elem.style;
7344
7345		computed = computed || getStyles( elem );
7346
7347		// getPropertyValue is only needed for .css('filter') in IE9, see #12537
7348		ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
7349
7350		// Support: Opera 12.1x only
7351		// Fall back to style even without computed
7352		// computed is undefined for elems on document fragments
7353		if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
7354			ret = jQuery.style( elem, name );
7355		}
7356
7357		if ( computed ) {
7358
7359			// A tribute to the "awesome hack by Dean Edwards"
7360			// Chrome < 17 and Safari 5.0 uses "computed value"
7361			// instead of "used value" for margin-right
7362			// Safari 5.1.7 (at least) returns percentage for a larger set of values,
7363			// but width seems to be reliably pixels
7364			// this is against the CSSOM draft spec:
7365			// http://dev.w3.org/csswg/cssom/#resolved-values
7366			if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
7367
7368				// Remember the original values
7369				width = style.width;
7370				minWidth = style.minWidth;
7371				maxWidth = style.maxWidth;
7372
7373				// Put in the new values to get a computed value out
7374				style.minWidth = style.maxWidth = style.width = ret;
7375				ret = computed.width;
7376
7377				// Revert the changed values
7378				style.width = width;
7379				style.minWidth = minWidth;
7380				style.maxWidth = maxWidth;
7381			}
7382		}
7383
7384		// Support: IE
7385		// IE returns zIndex value as an integer.
7386		return ret === undefined ?
7387			ret :
7388			ret + "";
7389	};
7390} else if ( documentElement.currentStyle ) {
7391	getStyles = function( elem ) {
7392		return elem.currentStyle;
7393	};
7394
7395	curCSS = function( elem, name, computed ) {
7396		var left, rs, rsLeft, ret,
7397			style = elem.style;
7398
7399		computed = computed || getStyles( elem );
7400		ret = computed ? computed[ name ] : undefined;
7401
7402		// Avoid setting ret to empty string here
7403		// so we don't default to auto
7404		if ( ret == null && style && style[ name ] ) {
7405			ret = style[ name ];
7406		}
7407
7408		// From the awesome hack by Dean Edwards
7409		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
7410
7411		// If we're not dealing with a regular pixel number
7412		// but a number that has a weird ending, we need to convert it to pixels
7413		// but not position css attributes, as those are
7414		// proportional to the parent element instead
7415		// and we can't measure the parent instead because it
7416		// might trigger a "stacking dolls" problem
7417		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
7418
7419			// Remember the original values
7420			left = style.left;
7421			rs = elem.runtimeStyle;
7422			rsLeft = rs && rs.left;
7423
7424			// Put in the new values to get a computed value out
7425			if ( rsLeft ) {
7426				rs.left = elem.currentStyle.left;
7427			}
7428			style.left = name === "fontSize" ? "1em" : ret;
7429			ret = style.pixelLeft + "px";
7430
7431			// Revert the changed values
7432			style.left = left;
7433			if ( rsLeft ) {
7434				rs.left = rsLeft;
7435			}
7436		}
7437
7438		// Support: IE
7439		// IE returns zIndex value as an integer.
7440		return ret === undefined ?
7441			ret :
7442			ret + "" || "auto";
7443	};
7444}
7445
7446
7447
7448
7449function addGetHookIf( conditionFn, hookFn ) {
7450
7451	// Define the hook, we'll check on the first run if it's really needed.
7452	return {
7453		get: function() {
7454			if ( conditionFn() ) {
7455
7456				// Hook not needed (or it's not possible to use it due
7457				// to missing dependency), remove it.
7458				delete this.get;
7459				return;
7460			}
7461
7462			// Hook needed; redefine it so that the support test is not executed again.
7463			return ( this.get = hookFn ).apply( this, arguments );
7464		}
7465	};
7466}
7467
7468
7469var
7470
7471		ralpha = /alpha\([^)]*\)/i,
7472	ropacity = /opacity\s*=\s*([^)]*)/i,
7473
7474	// swappable if display is none or starts with table except
7475	// "table", "table-cell", or "table-caption"
7476	// see here for display values:
7477	// https://developer.mozilla.org/en-US/docs/CSS/display
7478	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
7479	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
7480
7481	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
7482	cssNormalTransform = {
7483		letterSpacing: "0",
7484		fontWeight: "400"
7485	},
7486
7487	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
7488	emptyStyle = document.createElement( "div" ).style;
7489
7490
7491// return a css property mapped to a potentially vendor prefixed property
7492function vendorPropName( name ) {
7493
7494	// shortcut for names that are not vendor prefixed
7495	if ( name in emptyStyle ) {
7496		return name;
7497	}
7498
7499	// check for vendor prefixed names
7500	var capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),
7501		i = cssPrefixes.length;
7502
7503	while ( i-- ) {
7504		name = cssPrefixes[ i ] + capName;
7505		if ( name in emptyStyle ) {
7506			return name;
7507		}
7508	}
7509}
7510
7511function showHide( elements, show ) {
7512	var display, elem, hidden,
7513		values = [],
7514		index = 0,
7515		length = elements.length;
7516
7517	for ( ; index < length; index++ ) {
7518		elem = elements[ index ];
7519		if ( !elem.style ) {
7520			continue;
7521		}
7522
7523		values[ index ] = jQuery._data( elem, "olddisplay" );
7524		display = elem.style.display;
7525		if ( show ) {
7526
7527			// Reset the inline display of this element to learn if it is
7528			// being hidden by cascaded rules or not
7529			if ( !values[ index ] && display === "none" ) {
7530				elem.style.display = "";
7531			}
7532
7533			// Set elements which have been overridden with display: none
7534			// in a stylesheet to whatever the default browser style is
7535			// for such an element
7536			if ( elem.style.display === "" && isHidden( elem ) ) {
7537				values[ index ] =
7538					jQuery._data( elem, "olddisplay", defaultDisplay( elem.nodeName ) );
7539			}
7540		} else {
7541			hidden = isHidden( elem );
7542
7543			if ( display && display !== "none" || !hidden ) {
7544				jQuery._data(
7545					elem,
7546					"olddisplay",
vendor: 6,043 bytes, lines 7547-7758
7547					hidden ? display : jQuery.css( elem, "display" )
7548				);
7549			}
7550		}
7551	}
7552
7553	// Set the display of most of the elements in a second loop
7554	// to avoid the constant reflow
7555	for ( index = 0; index < length; index++ ) {
7556		elem = elements[ index ];
7557		if ( !elem.style ) {
7558			continue;
7559		}
7560		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
7561			elem.style.display = show ? values[ index ] || "" : "none";
7562		}
7563	}
7564
7565	return elements;
7566}
7567
7568function setPositiveNumber( elem, value, subtract ) {
7569	var matches = rnumsplit.exec( value );
7570	return matches ?
7571
7572		// Guard against undefined "subtract", e.g., when used as in cssHooks
7573		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
7574		value;
7575}
7576
7577function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
7578	var i = extra === ( isBorderBox ? "border" : "content" ) ?
7579
7580		// If we already have the right measurement, avoid augmentation
7581		4 :
7582
7583		// Otherwise initialize for horizontal or vertical properties
7584		name === "width" ? 1 : 0,
7585
7586		val = 0;
7587
7588	for ( ; i < 4; i += 2 ) {
7589
7590		// both box models exclude margin, so add it if we want it
7591		if ( extra === "margin" ) {
7592			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
7593		}
7594
7595		if ( isBorderBox ) {
7596
7597			// border-box includes padding, so remove it if we want content
7598			if ( extra === "content" ) {
7599				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
7600			}
7601
7602			// at this point, extra isn't border nor margin, so remove border
7603			if ( extra !== "margin" ) {
7604				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
7605			}
7606		} else {
7607
7608			// at this point, extra isn't content, so add padding
7609			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
7610
7611			// at this point, extra isn't content nor padding, so add border
7612			if ( extra !== "padding" ) {
7613				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
7614			}
7615		}
7616	}
7617
7618	return val;
7619}
7620
7621function getWidthOrHeight( elem, name, extra ) {
7622
7623	// Start with offset property, which is equivalent to the border-box value
7624	var valueIsBorderBox = true,
7625		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
7626		styles = getStyles( elem ),
7627		isBorderBox = support.boxSizing &&
7628			jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
7629
7630	// some non-html elements return undefined for offsetWidth, so check for null/undefined
7631	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
7632	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
7633	if ( val <= 0 || val == null ) {
7634
7635		// Fall back to computed then uncomputed css if necessary
7636		val = curCSS( elem, name, styles );
7637		if ( val < 0 || val == null ) {
7638			val = elem.style[ name ];
7639		}
7640
7641		// Computed unit is not pixels. Stop here and return.
7642		if ( rnumnonpx.test( val ) ) {
7643			return val;
7644		}
7645
7646		// we need the check for style in case a browser which returns unreliable values
7647		// for getComputedStyle silently falls back to the reliable elem.style
7648		valueIsBorderBox = isBorderBox &&
7649			( support.boxSizingReliable() || val === elem.style[ name ] );
7650
7651		// Normalize "", auto, and prepare for extra
7652		val = parseFloat( val ) || 0;
7653	}
7654
7655	// use the active box-sizing model to add/subtract irrelevant styles
7656	return ( val +
7657		augmentWidthOrHeight(
7658			elem,
7659			name,
7660			extra || ( isBorderBox ? "border" : "content" ),
7661			valueIsBorderBox,
7662			styles
7663		)
7664	) + "px";
7665}
7666
7667jQuery.extend( {
7668
7669	// Add in style property hooks for overriding the default
7670	// behavior of getting and setting a style property
7671	cssHooks: {
7672		opacity: {
7673			get: function( elem, computed ) {
7674				if ( computed ) {
7675
7676					// We should always get a number back from opacity
7677					var ret = curCSS( elem, "opacity" );
7678					return ret === "" ? "1" : ret;
7679				}
7680			}
7681		}
7682	},
7683
7684	// Don't automatically add "px" to these possibly-unitless properties
7685	cssNumber: {
7686		"animationIterationCount": true,
7687		"columnCount": true,
7688		"fillOpacity": true,
7689		"flexGrow": true,
7690		"flexShrink": true,
7691		"fontWeight": true,
7692		"lineHeight": true,
7693		"opacity": true,
7694		"order": true,
7695		"orphans": true,
7696		"widows": true,
7697		"zIndex": true,
7698		"zoom": true
7699	},
7700
7701	// Add in properties whose names you wish to fix before
7702	// setting or getting the value
7703	cssProps: {
7704
7705		// normalize float css property
7706		"float": support.cssFloat ? "cssFloat" : "styleFloat"
7707	},
7708
7709	// Get and set the style property on a DOM Node
7710	style: function( elem, name, value, extra ) {
7711
7712		// Don't set styles on text and comment nodes
7713		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
7714			return;
7715		}
7716
7717		// Make sure that we're working with the right name
7718		var ret, type, hooks,
7719			origName = jQuery.camelCase( name ),
7720			style = elem.style;
7721
7722		name = jQuery.cssProps[ origName ] ||
7723			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
7724
7725		// gets hook for the prefixed version
7726		// followed by the unprefixed version
7727		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
7728
7729		// Check if we're setting a value
7730		if ( value !== undefined ) {
7731			type = typeof value;
7732
7733			// Convert "+=" or "-=" to relative numbers (#7345)
7734			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
7735				value = adjustCSS( elem, name, ret );
7736
7737				// Fixes bug #9237
7738				type = "number";
7739			}
7740
7741			// Make sure that null and NaN values aren't set. See: #7116
7742			if ( value == null || value !== value ) {
7743				return;
7744			}
7745
7746			// If a number was passed in, add the unit (except for certain CSS properties)
7747			if ( type === "number" ) {
7748				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
7749			}
7750
7751			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
7752			// but it would mean to define eight
7753			// (for every problematic property) identical functions
7754			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
7755				style[ name ] = "inherit";
7756			}
7757
7758			// If a hook was provided, use that value, otherwise just set the specified value
7759			if ( !hooks || !( "set" in hooks ) ||
7760				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
7761
7762				// Support: IE
7763				// Swallow errors from 'invalid' CSS values (#5509)
7764				try {
7765					style[ name ] = value;
7766				} catch ( e ) {}
7767			}
7768
7769		} else {
7770
7771			// If a hook was provided get the non-computed value from there
7772			if ( hooks && "get" in hooks &&
7773				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
7774
7775				return ret;
7776			}
7777
7778			// Otherwise just get the value from the style object
7779			return style[ name ];
7780		}
7781	},
7782
7783	css: function( elem, name, extra, styles ) {
7784		var num, val, hooks,
7785			origName = jQuery.camelCase( name );
7786
7787		// Make sure that we're working with the right name
7788		name = jQuery.cssProps[ origName ] ||
7789			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
7790
7791		// gets hook for the prefixed version
7792		// followed by the unprefixed version
7793		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
7794
7795		// If a hook was provided get the computed value from there
7796		if ( hooks && "get" in hooks ) {
7797			val = hooks.get( elem, true, extra );
7798		}
7799
7800		// Otherwise, if a way to get the computed value exists, use that
7801		if ( val === undefined ) {
7802			val = curCSS( elem, name, styles );
7803		}
7804
7805		//convert "normal" to computed value
7806		if ( val === "normal" && name in cssNormalTransform ) {
7807			val = cssNormalTransform[ name ];
7808		}
7809
7810		// Return, converting to number if forced or a qualifier was provided and val looks numeric
7811		if ( extra === "" || extra ) {
7812			num = parseFloat( val );
7813			return extra === true || isFinite( num ) ? num || 0 : val;
7814		}
7815		return val;
7816	}
7817} );
7818
7819jQuery.each( [ "height", "width" ], function( i, name ) {
7820	jQuery.cssHooks[ name ] = {
7821		get: function( elem, computed, extra ) {
7822			if ( computed ) {
7823
7824				// certain elements can have dimension info if we invisibly show them
7825				// however, it must have a current display style that would benefit from this
7826				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
7827					elem.offsetWidth === 0 ?
7828						swap( elem, cssShow, function() {
7829							return getWidthOrHeight( elem, name, extra );
7830						} ) :
7831						getWidthOrHeight( elem, name, extra );
7832			}
7833		},
7834
7835		set: function( elem, value, extra ) {
7836			var styles = extra && getStyles( elem );
7837			return setPositiveNumber( elem, value, extra ?
7838				augmentWidthOrHeight(
7839					elem,
7840					name,
7841					extra,
7842					support.boxSizing &&
7843						jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
7844					styles
7845				) : 0
7846			);
7847		}
7848	};
7849} );
7850
7851if ( !support.opacity ) {
7852	jQuery.cssHooks.opacity = {
7853		get: function( elem, computed ) {
7854
7855			// IE uses filters for opacity
7856			return ropacity.test( ( computed && elem.currentStyle ?
7857				elem.currentStyle.filter :
7858				elem.style.filter ) || "" ) ?
7859					( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
7860					computed ? "1" : "";
7861		},
7862
7863		set: function( elem, value ) {
7864			var style = elem.style,
7865				currentStyle = elem.currentStyle,
7866				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
7867				filter = currentStyle && currentStyle.filter || style.filter || "";
7868
7869			// IE has trouble with opacity if it does not have layout
7870			// Force it by setting the zoom level
7871			style.zoom = 1;
7872
7873			// if setting opacity to 1, and no other filters exist -
7874			// attempt to remove filter attribute #6652
7875			// if value === "", then remove inline opacity #12685
7876			if ( ( value >= 1 || value === "" ) &&
7877					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
7878					style.removeAttribute ) {
7879
7880				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
7881				// if "filter:" is present at all, clearType is disabled, we want to avoid this
7882				// style.removeAttribute is IE Only, but so apparently is this code path...
7883				style.removeAttribute( "filter" );
7884
7885				// if there is no filter style applied in a css rule
7886				// or unset inline opacity, we are done
7887				if ( value === "" || currentStyle && !currentStyle.filter ) {
7888					return;
7889				}
7890			}
7891
7892			// otherwise, set new filter values
7893			style.filter = ralpha.test( filter ) ?
7894				filter.replace( ralpha, opacity ) :
7895				filter + " " + opacity;
7896		}
7897	};
7898}
7899
7900jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
7901	function( elem, computed ) {
7902		if ( computed ) {
7903			return swap( elem, { "display": "inline-block" },
7904				curCSS, [ elem, "marginRight" ] );
7905		}
7906	}
7907);
7908
7909jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
7910	function( elem, computed ) {
7911		if ( computed ) {
7912			return (
7913				parseFloat( curCSS( elem, "marginLeft" ) ) ||
7914
vendor: 4,625 bytes, lines 7915-8093
7915				// Support: IE<=11+
7916				// Running getBoundingClientRect on a disconnected node in IE throws an error
7917				// Support: IE8 only
7918				// getClientRects() errors on disconnected elems
7919				( jQuery.contains( elem.ownerDocument, elem ) ?
7920					elem.getBoundingClientRect().left -
7921						swap( elem, { marginLeft: 0 }, function() {
7922							return elem.getBoundingClientRect().left;
7923						} ) :
7924					0
7925				)
7926			) + "px";
7927		}
7928	}
7929);
7930
7931// These hooks are used by animate to expand properties
7932jQuery.each( {
7933	margin: "",
7934	padding: "",
7935	border: "Width"
7936}, function( prefix, suffix ) {
7937	jQuery.cssHooks[ prefix + suffix ] = {
7938		expand: function( value ) {
7939			var i = 0,
7940				expanded = {},
7941
7942				// assumes a single number if not a string
7943				parts = typeof value === "string" ? value.split( " " ) : [ value ];
7944
7945			for ( ; i < 4; i++ ) {
7946				expanded[ prefix + cssExpand[ i ] + suffix ] =
7947					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
7948			}
7949
7950			return expanded;
7951		}
7952	};
7953
7954	if ( !rmargin.test( prefix ) ) {
7955		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
7956	}
7957} );
7958
7959jQuery.fn.extend( {
7960	css: function( name, value ) {
7961		return access( this, function( elem, name, value ) {
7962			var styles, len,
7963				map = {},
7964				i = 0;
7965
7966			if ( jQuery.isArray( name ) ) {
7967				styles = getStyles( elem );
7968				len = name.length;
7969
7970				for ( ; i < len; i++ ) {
7971					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
7972				}
7973
7974				return map;
7975			}
7976
7977			return value !== undefined ?
7978				jQuery.style( elem, name, value ) :
7979				jQuery.css( elem, name );
7980		}, name, value, arguments.length > 1 );
7981	},
7982	show: function() {
7983		return showHide( this, true );
7984	},
7985	hide: function() {
7986		return showHide( this );
7987	},
7988	toggle: function( state ) {
7989		if ( typeof state === "boolean" ) {
7990			return state ? this.show() : this.hide();
7991		}
7992
7993		return this.each( function() {
7994			if ( isHidden( this ) ) {
7995				jQuery( this ).show();
7996			} else {
7997				jQuery( this ).hide();
7998			}
7999		} );
8000	}
8001} );
8002
8003
8004function Tween( elem, options, prop, end, easing ) {
8005	return new Tween.prototype.init( elem, options, prop, end, easing );
8006}
8007jQuery.Tween = Tween;
8008
8009Tween.prototype = {
8010	constructor: Tween,
8011	init: function( elem, options, prop, end, easing, unit ) {
8012		this.elem = elem;
8013		this.prop = prop;
8014		this.easing = easing || jQuery.easing._default;
8015		this.options = options;
8016		this.start = this.now = this.cur();
8017		this.end = end;
8018		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
8019	},
8020	cur: function() {
8021		var hooks = Tween.propHooks[ this.prop ];
8022
8023		return hooks && hooks.get ?
8024			hooks.get( this ) :
8025			Tween.propHooks._default.get( this );
8026	},
8027	run: function( percent ) {
8028		var eased,
8029			hooks = Tween.propHooks[ this.prop ];
8030
8031		if ( this.options.duration ) {
8032			this.pos = eased = jQuery.easing[ this.easing ](
8033				percent, this.options.duration * percent, 0, 1, this.options.duration
8034			);
8035		} else {
8036			this.pos = eased = percent;
8037		}
8038		this.now = ( this.end - this.start ) * eased + this.start;
8039
8040		if ( this.options.step ) {
8041			this.options.step.call( this.elem, this.now, this );
8042		}
8043
8044		if ( hooks && hooks.set ) {
8045			hooks.set( this );
8046		} else {
8047			Tween.propHooks._default.set( this );
8048		}
8049		return this;
8050	}
8051};
8052
8053Tween.prototype.init.prototype = Tween.prototype;
8054
8055Tween.propHooks = {
8056	_default: {
8057		get: function( tween ) {
8058			var result;
8059
8060			// Use a property on the element directly when it is not a DOM element,
8061			// or when there is no matching style property that exists.
8062			if ( tween.elem.nodeType !== 1 ||
8063				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
8064				return tween.elem[ tween.prop ];
8065			}
8066
8067			// passing an empty string as a 3rd parameter to .css will automatically
8068			// attempt a parseFloat and fallback to a string if the parse fails
8069			// so, simple values such as "10px" are parsed to Float.
8070			// complex values such as "rotate(1rad)" are returned as is.
8071			result = jQuery.css( tween.elem, tween.prop, "" );
8072
8073			// Empty strings, null, undefined and "auto" are converted to 0.
8074			return !result || result === "auto" ? 0 : result;
8075		},
8076		set: function( tween ) {
8077
8078			// use step hook for back compat - use cssHook if its there - use .style if its
8079			// available and use plain properties where available
8080			if ( jQuery.fx.step[ tween.prop ] ) {
8081				jQuery.fx.step[ tween.prop ]( tween );
8082			} else if ( tween.elem.nodeType === 1 &&
8083				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
8084					jQuery.cssHooks[ tween.prop ] ) ) {
8085				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
8086			} else {
8087				tween.elem[ tween.prop ] = tween.now;
8088			}
8089		}
8090	}
8091};
8092
8093// Support: IE <=9
8094// Panic based approach to setting things on disconnected nodes
8095
8096Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
8097	set: function( tween ) {
8098		if ( tween.elem.nodeType && tween.elem.parentNode ) {
8099			tween.elem[ tween.prop ] = tween.now;
8100		}
8101	}
8102};
8103
8104jQuery.easing = {
8105	linear: function( p ) {
8106		return p;
8107	},
8108	swing: function( p ) {
8109		return 0.5 - Math.cos( p * Math.PI ) / 2;
8110	},
8111	_default: "swing"
8112};
8113
8114jQuery.fx = Tween.prototype.init;
8115
8116// Back Compat <1.8 extension point
8117jQuery.fx.step = {};
8118
8119
8120
8121
8122var
8123	fxNow, timerId,
8124	rfxtypes = /^(?:toggle|show|hide)$/,
8125	rrun = /queueHooks$/;
8126
8127// Animations created synchronously will run synchronously
8128function createFxNow() {
8129	window.setTimeout( function() {
8130		fxNow = undefined;
8131	} );
8132	return ( fxNow = jQuery.now() );
8133}
8134
8135// Generate parameters to create a standard animation
8136function genFx( type, includeWidth ) {
8137	var which,
8138		attrs = { height: type },
8139		i = 0;
8140
8141	// if we include width, step value is 1 to do all cssExpand values,
8142	// if we don't include width, step value is 2 to skip over Left and Right
8143	includeWidth = includeWidth ? 1 : 0;
8144	for ( ; i < 4 ; i += 2 - includeWidth ) {
8145		which = cssExpand[ i ];
8146		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
8147	}
8148
8149	if ( includeWidth ) {
8150		attrs.opacity = attrs.width = type;
8151	}
8152
8153	return attrs;
8154}
8155
8156function createTween( value, prop, animation ) {
8157	var tween,
8158		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
8159		index = 0,
8160		length = collection.length;
8161	for ( ; index < length; index++ ) {
8162		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
8163
8164			// we're done with this property
8165			return tween;
8166		}
8167	}
8168}
8169
8170function defaultPrefilter( elem, props, opts ) {
8171	/* jshint validthis: true */
8172	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
8173		anim = this,
8174		orig = {},
8175		style = elem.style,
8176		hidden = elem.nodeType && isHidden( elem ),
8177		dataShow = jQuery._data( elem, "fxshow" );
8178
8179	// handle queue: false promises
8180	if ( !opts.queue ) {
8181		hooks = jQuery._queueHooks( elem, "fx" );
8182		if ( hooks.unqueued == null ) {
8183			hooks.unqueued = 0;
8184			oldfire = hooks.empty.fire;
8185			hooks.empty.fire = function() {
8186				if ( !hooks.unqueued ) {
8187					oldfire();
8188				}
8189			};
8190		}
8191		hooks.unqueued++;
8192
8193		anim.always( function() {
8194
8195			// doing this makes sure that the complete handler will be called
8196			// before this completes
8197			anim.always( function() {
8198				hooks.unqueued--;
8199				if ( !jQuery.queue( elem, "fx" ).length ) {
8200					hooks.empty.fire();
8201				}
8202			} );
8203		} );
8204	}
8205
8206	// height/width overflow pass
8207	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
8208
8209		// Make sure that nothing sneaks out
8210		// Record all 3 overflow attributes because IE does not
8211		// change the overflow attribute when overflowX and
8212		// overflowY are set to the same value
8213		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
8214
8215		// Set display property to inline-block for height/width
8216		// animations on inline elements that are having width/height animated
8217		display = jQuery.css( elem, "display" );
8218
8219		// Test default display if display is currently "none"
8220		checkDisplay = display === "none" ?
8221			jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
8222
8223		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
8224
8225			// inline-level elements accept inline-block;
8226			// block-level elements need to be inline with layout
8227			if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
8228				style.display = "inline-block";
8229			} else {
8230				style.zoom = 1;
8231			}
8232		}
8233	}
8234
8235	if ( opts.overflow ) {
8236		style.overflow = "hidden";
8237		if ( !support.shrinkWrapBlocks() ) {
8238			anim.always( function() {
8239				style.overflow = opts.overflow[ 0 ];
8240				style.overflowX = opts.overflow[ 1 ];
8241				style.overflowY = opts.overflow[ 2 ];
8242			} );
8243		}
8244	}
8245
8246	// show/hide pass
8247	for ( prop in props ) {
8248		value = props[ prop ];
8249		if ( rfxtypes.exec( value ) ) {
8250			delete props[ prop ];
8251			toggle = toggle || value === "toggle";
8252			if ( value === ( hidden ? "hide" : "show" ) ) {
8253
8254				// If there is dataShow left over from a stopped hide or show
8255				// and we are going to proceed with show, we should pretend to be hidden
8256				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
8257					hidden = true;
8258				} else {
8259					continue;
8260				}
8261			}
8262			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
8263
8264		// Any non-fx value stops us from restoring the original display value
8265		} else {
8266			display = undefined;
8267		}
8268	}
8269
8270	if ( !jQuery.isEmptyObject( orig ) ) {
8271		if ( dataShow ) {
8272			if ( "hidden" in dataShow ) {
8273				hidden = dataShow.hidden;
8274			}
8275		} else {
8276			dataShow = jQuery._data( elem, "fxshow", {} );
8277		}
8278
8279		// store state if its toggle - enables .stop().toggle() to "reverse"
8280		if ( toggle ) {
8281			dataShow.hidden = !hidden;
8282		}
8283		if ( hidden ) {
8284			jQuery( elem ).show();
8285		} else {
8286			anim.done( function() {
8287				jQuery( elem ).hide();
8288			} );
8289		}
8290		anim.done( function() {
8291			var prop;
8292			jQuery._removeData( elem, "fxshow" );
8293			for ( prop in orig ) {
8294				jQuery.style( elem, prop, orig[ prop ] );
8295			}
8296		} );
8297		for ( prop in orig ) {
8298			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
8299
8300			if ( !( prop in dataShow ) ) {
8301				dataShow[ prop ] = tween.start;
8302				if ( hidden ) {
8303					tween.end = tween.start;
8304					tween.start = prop === "width" || prop === "height" ? 1 : 0;
8305				}
8306			}
8307		}
8308
8309	// If this is a noop like .hide().hide(), restore an overwritten display value
8310	} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : dis
vendor: 10,851 bytes, lines 8310-8742
8310play ) === "inline" ) {
8311		style.display = display;
8312	}
8313}
8314
8315function propFilter( props, specialEasing ) {
8316	var index, name, easing, value, hooks;
8317
8318	// camelCase, specialEasing and expand cssHook pass
8319	for ( index in props ) {
8320		name = jQuery.camelCase( index );
8321		easing = specialEasing[ name ];
8322		value = props[ index ];
8323		if ( jQuery.isArray( value ) ) {
8324			easing = value[ 1 ];
8325			value = props[ index ] = value[ 0 ];
8326		}
8327
8328		if ( index !== name ) {
8329			props[ name ] = value;
8330			delete props[ index ];
8331		}
8332
8333		hooks = jQuery.cssHooks[ name ];
8334		if ( hooks && "expand" in hooks ) {
8335			value = hooks.expand( value );
8336			delete props[ name ];
8337
8338			// not quite $.extend, this wont overwrite keys already present.
8339			// also - reusing 'index' from above because we have the correct "name"
8340			for ( index in value ) {
8341				if ( !( index in props ) ) {
8342					props[ index ] = value[ index ];
8343					specialEasing[ index ] = easing;
8344				}
8345			}
8346		} else {
8347			specialEasing[ name ] = easing;
8348		}
8349	}
8350}
8351
8352function Animation( elem, properties, options ) {
8353	var result,
8354		stopped,
8355		index = 0,
8356		length = Animation.prefilters.length,
8357		deferred = jQuery.Deferred().always( function() {
8358
8359			// don't match elem in the :animated selector
8360			delete tick.elem;
8361		} ),
8362		tick = function() {
8363			if ( stopped ) {
8364				return false;
8365			}
8366			var currentTime = fxNow || createFxNow(),
8367				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
8368
8369				// Support: Android 2.3
8370				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
8371				temp = remaining / animation.duration || 0,
8372				percent = 1 - temp,
8373				index = 0,
8374				length = animation.tweens.length;
8375
8376			for ( ; index < length ; index++ ) {
8377				animation.tweens[ index ].run( percent );
8378			}
8379
8380			deferred.notifyWith( elem, [ animation, percent, remaining ] );
8381
8382			if ( percent < 1 && length ) {
8383				return remaining;
8384			} else {
8385				deferred.resolveWith( elem, [ animation ] );
8386				return false;
8387			}
8388		},
8389		animation = deferred.promise( {
8390			elem: elem,
8391			props: jQuery.extend( {}, properties ),
8392			opts: jQuery.extend( true, {
8393				specialEasing: {},
8394				easing: jQuery.easing._default
8395			}, options ),
8396			originalProperties: properties,
8397			originalOptions: options,
8398			startTime: fxNow || createFxNow(),
8399			duration: options.duration,
8400			tweens: [],
8401			createTween: function( prop, end ) {
8402				var tween = jQuery.Tween( elem, animation.opts, prop, end,
8403						animation.opts.specialEasing[ prop ] || animation.opts.easing );
8404				animation.tweens.push( tween );
8405				return tween;
8406			},
8407			stop: function( gotoEnd ) {
8408				var index = 0,
8409
8410					// if we are going to the end, we want to run all the tweens
8411					// otherwise we skip this part
8412					length = gotoEnd ? animation.tweens.length : 0;
8413				if ( stopped ) {
8414					return this;
8415				}
8416				stopped = true;
8417				for ( ; index < length ; index++ ) {
8418					animation.tweens[ index ].run( 1 );
8419				}
8420
8421				// resolve when we played the last frame
8422				// otherwise, reject
8423				if ( gotoEnd ) {
8424					deferred.notifyWith( elem, [ animation, 1, 0 ] );
8425					deferred.resolveWith( elem, [ animation, gotoEnd ] );
8426				} else {
8427					deferred.rejectWith( elem, [ animation, gotoEnd ] );
8428				}
8429				return this;
8430			}
8431		} ),
8432		props = animation.props;
8433
8434	propFilter( props, animation.opts.specialEasing );
8435
8436	for ( ; index < length ; index++ ) {
8437		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
8438		if ( result ) {
8439			if ( jQuery.isFunction( result.stop ) ) {
8440				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
8441					jQuery.proxy( result.stop, result );
8442			}
8443			return result;
8444		}
8445	}
8446
8447	jQuery.map( props, createTween, animation );
8448
8449	if ( jQuery.isFunction( animation.opts.start ) ) {
8450		animation.opts.start.call( elem, animation );
8451	}
8452
8453	jQuery.fx.timer(
8454		jQuery.extend( tick, {
8455			elem: elem,
8456			anim: animation,
8457			queue: animation.opts.queue
8458		} )
8459	);
8460
8461	// attach callbacks from options
8462	return animation.progress( animation.opts.progress )
8463		.done( animation.opts.done, animation.opts.complete )
8464		.fail( animation.opts.fail )
8465		.always( animation.opts.always );
8466}
8467
8468jQuery.Animation = jQuery.extend( Animation, {
8469
8470	tweeners: {
8471		"*": [ function( prop, value ) {
8472			var tween = this.createTween( prop, value );
8473			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
8474			return tween;
8475		} ]
8476	},
8477
8478	tweener: function( props, callback ) {
8479		if ( jQuery.isFunction( props ) ) {
8480			callback = props;
8481			props = [ "*" ];
8482		} else {
8483			props = props.match( rnotwhite );
8484		}
8485
8486		var prop,
8487			index = 0,
8488			length = props.length;
8489
8490		for ( ; index < length ; index++ ) {
8491			prop = props[ index ];
8492			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
8493			Animation.tweeners[ prop ].unshift( callback );
8494		}
8495	},
8496
8497	prefilters: [ defaultPrefilter ],
8498
8499	prefilter: function( callback, prepend ) {
8500		if ( prepend ) {
8501			Animation.prefilters.unshift( callback );
8502		} else {
8503			Animation.prefilters.push( callback );
8504		}
8505	}
8506} );
8507
8508jQuery.speed = function( speed, easing, fn ) {
8509	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
8510		complete: fn || !fn && easing ||
8511			jQuery.isFunction( speed ) && speed,
8512		duration: speed,
8513		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
8514	};
8515
8516	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
8517		opt.duration in jQuery.fx.speeds ?
8518			jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
8519
8520	// normalize opt.queue - true/undefined/null -> "fx"
8521	if ( opt.queue == null || opt.queue === true ) {
8522		opt.queue = "fx";
8523	}
8524
8525	// Queueing
8526	opt.old = opt.complete;
8527
8528	opt.complete = function() {
8529		if ( jQuery.isFunction( opt.old ) ) {
8530			opt.old.call( this );
8531		}
8532
8533		if ( opt.queue ) {
8534			jQuery.dequeue( this, opt.queue );
8535		}
8536	};
8537
8538	return opt;
8539};
8540
8541jQuery.fn.extend( {
8542	fadeTo: function( speed, to, easing, callback ) {
8543
8544		// show any hidden elements after setting opacity to 0
8545		return this.filter( isHidden ).css( "opacity", 0 ).show()
8546
8547			// animate to the value specified
8548			.end().animate( { opacity: to }, speed, easing, callback );
8549	},
8550	animate: function( prop, speed, easing, callback ) {
8551		var empty = jQuery.isEmptyObject( prop ),
8552			optall = jQuery.speed( speed, easing, callback ),
8553			doAnimation = function() {
8554
8555				// Operate on a copy of prop so per-property easing won't be lost
8556				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
8557
8558				// Empty animations, or finishing resolves immediately
8559				if ( empty || jQuery._data( this, "finish" ) ) {
8560					anim.stop( true );
8561				}
8562			};
8563			doAnimation.finish = doAnimation;
8564
8565		return empty || optall.queue === false ?
8566			this.each( doAnimation ) :
8567			this.queue( optall.queue, doAnimation );
8568	},
8569	stop: function( type, clearQueue, gotoEnd ) {
8570		var stopQueue = function( hooks ) {
8571			var stop = hooks.stop;
8572			delete hooks.stop;
8573			stop( gotoEnd );
8574		};
8575
8576		if ( typeof type !== "string" ) {
8577			gotoEnd = clearQueue;
8578			clearQueue = type;
8579			type = undefined;
8580		}
8581		if ( clearQueue && type !== false ) {
8582			this.queue( type || "fx", [] );
8583		}
8584
8585		return this.each( function() {
8586			var dequeue = true,
8587				index = type != null && type + "queueHooks",
8588				timers = jQuery.timers,
8589				data = jQuery._data( this );
8590
8591			if ( index ) {
8592				if ( data[ index ] && data[ index ].stop ) {
8593					stopQueue( data[ index ] );
8594				}
8595			} else {
8596				for ( index in data ) {
8597					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
8598						stopQueue( data[ index ] );
8599					}
8600				}
8601			}
8602
8603			for ( index = timers.length; index--; ) {
8604				if ( timers[ index ].elem === this &&
8605					( type == null || timers[ index ].queue === type ) ) {
8606
8607					timers[ index ].anim.stop( gotoEnd );
8608					dequeue = false;
8609					timers.splice( index, 1 );
8610				}
8611			}
8612
8613			// start the next in the queue if the last step wasn't forced
8614			// timers currently will call their complete callbacks, which will dequeue
8615			// but only if they were gotoEnd
8616			if ( dequeue || !gotoEnd ) {
8617				jQuery.dequeue( this, type );
8618			}
8619		} );
8620	},
8621	finish: function( type ) {
8622		if ( type !== false ) {
8623			type = type || "fx";
8624		}
8625		return this.each( function() {
8626			var index,
8627				data = jQuery._data( this ),
8628				queue = data[ type + "queue" ],
8629				hooks = data[ type + "queueHooks" ],
8630				timers = jQuery.timers,
8631				length = queue ? queue.length : 0;
8632
8633			// enable finishing flag on private data
8634			data.finish = true;
8635
8636			// empty the queue first
8637			jQuery.queue( this, type, [] );
8638
8639			if ( hooks && hooks.stop ) {
8640				hooks.stop.call( this, true );
8641			}
8642
8643			// look for any active animations, and finish them
8644			for ( index = timers.length; index--; ) {
8645				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
8646					timers[ index ].anim.stop( true );
8647					timers.splice( index, 1 );
8648				}
8649			}
8650
8651			// look for any animations in the old queue and finish them
8652			for ( index = 0; index < length; index++ ) {
8653				if ( queue[ index ] && queue[ index ].finish ) {
8654					queue[ index ].finish.call( this );
8655				}
8656			}
8657
8658			// turn off finishing flag
8659			delete data.finish;
8660		} );
8661	}
8662} );
8663
8664jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
8665	var cssFn = jQuery.fn[ name ];
8666	jQuery.fn[ name ] = function( speed, easing, callback ) {
8667		return speed == null || typeof speed === "boolean" ?
8668			cssFn.apply( this, arguments ) :
8669			this.animate( genFx( name, true ), speed, easing, callback );
8670	};
8671} );
8672
8673// Generate shortcuts for custom animations
8674jQuery.each( {
8675	slideDown: genFx( "show" ),
8676	slideUp: genFx( "hide" ),
8677	slideToggle: genFx( "toggle" ),
8678	fadeIn: { opacity: "show" },
8679	fadeOut: { opacity: "hide" },
8680	fadeToggle: { opacity: "toggle" }
8681}, function( name, props ) {
8682	jQuery.fn[ name ] = function( speed, easing, callback ) {
8683		return this.animate( props, speed, easing, callback );
8684	};
8685} );
8686
8687jQuery.timers = [];
8688jQuery.fx.tick = function() {
8689	var timer,
8690		timers = jQuery.timers,
8691		i = 0;
8692
8693	fxNow = jQuery.now();
8694
8695	for ( ; i < timers.length; i++ ) {
8696		timer = timers[ i ];
8697
8698		// Checks the timer has not already been removed
8699		if ( !timer() && timers[ i ] === timer ) {
8700			timers.splice( i--, 1 );
8701		}
8702	}
8703
8704	if ( !timers.length ) {
8705		jQuery.fx.stop();
8706	}
8707	fxNow = undefined;
8708};
8709
8710jQuery.fx.timer = function( timer ) {
8711	jQuery.timers.push( timer );
8712	if ( timer() ) {
8713		jQuery.fx.start();
8714	} else {
8715		jQuery.timers.pop();
8716	}
8717};
8718
8719jQuery.fx.interval = 13;
8720
8721jQuery.fx.start = function() {
8722	if ( !timerId ) {
8723		timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
8724	}
8725};
8726
8727jQuery.fx.stop = function() {
8728	window.clearInterval( timerId );
8729	timerId = null;
8730};
8731
8732jQuery.fx.speeds = {
8733	slow: 600,
8734	fast: 200,
8735
8736	// Default speed
8737	_default: 400
8738};
8739
8740
8741// Based off of the plugin by Clint Helfers, with permission.
8742// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
8743jQuery.fn.delay = function( time, type ) {
8744	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
8745	type = type || "fx";
8746
8747	return this.queue( type, function( next, hooks ) {
8748		var timeout = window.setTimeout( next, time );
8749		hooks.stop = function() {
8750			window.clearTimeout( timeout );
8751		};
8752	} );
8753};
8754
8755
8756( function() {
8757	var a,
8758		input = document.createElement( "input" ),
8759		div = document.createElement( "div" ),
8760		select = document.createElement( "select" ),
8761		opt = select.appendChild( document.createElement( "option" ) );
8762
8763	// Setup
8764	div = document.createElement( "div" );
8765	div.setAttribute( "className", "t" );
8766	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
8767	a = div.getElementsByTagName( "a" )[ 0 ];
8768
8769	// Support: Windows Web Apps (WWA)
8770	// `type` must use .setAttribute for WWA (#14901)
8771	input.setAttribute( "type", "checkbox" );
8772	div.appendChild( input );
8773
8774	a = div.getElementsByTagName( "a" )[ 0 ];
8775
8776	// First batch of tests.
8777	a.style.cssText = "top:1px";
8778
8779	// Test setAttribute on camelCase class.
8780	// If it works, we need attrFixes when doing get/setAttribute (ie6/7)
8781	support.getSetAttribute = div.className !== "t";
8782
8783	// Get the style information from getAttribute
8784	// (IE uses .cssText instead)
8785	support.style = /top/.test( a.getAttribute( "style" ) );
8786
8787	// Make sure that URLs aren't manipulated
8788	// (IE normalizes it by default)
8789	support.hrefNormalized = a.getAttribute( "href" ) === "/a";
8790
8791	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
8792	support.checkOn = !!input.value;
8793
8794	// Make sure that a selected-by-default option has a working selected property.
8795	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
8796	support.optSelected = opt.selected;
8797
8798	// Tests for enctype support on a form (#6743)
8799	support.enctype = !!document.createElement( "form" ).enctype;
8800
8801	// Make sure that the options inside disabled selects aren't marked as disabled
8802	// (WebKit marks them as disabled)
8803	select.disabled = true;
8804	support.optDisabled = !opt.disabled;
8805
8806	// Support: IE8 only
8807	// Check if we can trust getAttribute("value")
8808	input = document.createElement( "input" );
8809	input.setAttribute( "value", "" );
8810	support.input = input.getAttribute( "value" ) === "";
8811
8812	// Check if an input maintains its value after becoming a radio
8813	input.value = "t";
8814	input.setAttribute( "type", "radio" );
8815	support.radioValue = input.value === "t";
8816} )();
8817
8818
8819var rreturn = /\r/g,
8820	rspaces = /[\x20\t\r\n\f]+/g;
8821
8822jQuery.fn.extend( {
8823	val: function( value ) {
8824		var hooks, ret, isFunction,
8825			elem = this[ 0 ];
8826
8827		if ( !arguments.length ) {
8828			if ( elem ) {
8829				hooks = jQuery.valHooks[ elem.type ] ||
8830					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
8831
8832				if (
8833					hooks &&
8834					"get" in hooks &&
8835					( ret = hooks.get( elem, "value" ) ) !== undefined
8836				) {
8837					return ret;
8838				}
8839
8840				ret = elem.value;
8841
8842				return typeof ret === "string" ?
8843
8844					// handle most common string cases
8845					ret.replace( rreturn, "" ) :
8846
8847					// handle cases where value is null/undef or number
8848					ret == null ? "" : ret;
8849			}
8850
8851			return;
8852		}
8853
8854		isFunction = jQuery.isFunction( value );
8855
8856		return this.each( function( i ) {
8857			var val;
8858
8859			if ( this.nodeType !== 1 ) {
8860				return;
8861			}
8862
8863			if ( isFunction ) {
8864				val = value.call( this, i, jQuery( this ).val() );
8865			} else {
8866				val = value;
8867			}
8868
8869			// Treat null/undefined as ""; convert numbers to string
8870			if ( val == null ) {
8871				val = "";
8872			} else if ( typeof val === "number" ) {
8873				val += "";
8874			} else if ( jQuery.isArray( val ) ) {
8875				val = jQuery.map( val, function( value ) {
8876					return value == null ? "" : value + "";
8877				} );
8878			}
8879
8880			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
8881
8882			// If set returns undefined, fall back to normal setting
8883			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
8884				this.value = val;
8885			}
8886		} );
8887	}
8888} );
8889
8890jQuery.extend( {
8891	valHooks: {
8892		option: {
8893			get: function( elem ) {
8894				var val = jQuery.find.attr( elem, "value" );
8895				return val != null ?
8896					val :
8897
8898					// Support: IE10-11+
8899					// option.text throws exceptions (#14686, #14858)
8900					// Strip and collapse whitespace
8901					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
8902					jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
8903			}
8904		},
8905		select: {
8906			get: function( elem ) {
8907				var value, option,
8908					options = elem.options,
8909					index = elem.selectedIndex,
8910					one = elem.type === "select-one" || index < 0,
8911					values = one ? null : [],
8912					max = one ? index + 1 : options.length,
8913					i = index < 0 ?
8914						max :
8915						one ? index : 0;
8916
8917				// Loop through all the selected options
8918				for ( ; i < max; i++ ) {
8919					option = options[ i ];
8920
8921					// oldIE doesn't update selected after form reset (#2551)
8922					if ( ( option.selected || i === index ) &&
8923
8924							// Don't return options that are disabled or in a disabled optgroup
8925							( support.optDisabled ?
8926								!option.disabled :
8927								option.getAttribute( "disabled" ) === null ) &&
8928							( !option.parentNode.disabled ||
8929								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
8930
8931						// Get the specific value for the option
8932						value = jQuery( option ).val();
8933
8934						// We don't need an array for one selects
8935						if ( one ) {
8936							return value;
8937						}
8938
8939						// Multi-Selects return an array
8940						values.push( value );
8941					}
8942				}
8943
8944				return values;
8945			},
8946
8947			set: function( elem, value ) {
8948				var optionSet, option,
8949					options = elem.options,
8950					values = jQuery.makeArray( value ),
8951					i = options.length;
8952
8953				while ( i-- ) {
8954					option = options[ i ];
8955
8956					if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) {
8957
8958						// Support: IE6
8959						// When new option element is added to select box we need to
8960						// force reflow of newly added node in order to workaround delay
8961						// of initialization properties
8962						try {
8963							option.selected = optionSet = true;
8964
8965						} catch ( _ ) {
8966
8967							// Will be executed only in IE6
8968							option.scrollHeight;
8969						}
8970
8971					} else {
8972						option.selected = false;
8973					}
8974				}
8975
8976				// Force browsers to behave consistently when non-matching value is set
8977				if ( !optionSet ) {
8978					elem.selectedIndex = -1;
8979				}
8980
8981				return options;
8982			}
8983		}
8984	}
8985} );
8986
8987// Radios and checkboxes getter/setter
8988jQuery.each( [ "radio", "checkbox" ], function() {
8989	jQuery.valHooks[ this ] = {
8990		set: function( elem, value ) {
8991			if ( jQuery.isArray( value ) ) {
8992				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
8993			}
8994		}
8995	};
8996	if ( !support.checkOn ) {
8997		jQuery.valHooks[ this ].get = function( elem ) {
8998			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
8999		};
9000	}
9001} );
9002
9003
9004
9005
9006var nodeHook, boolHook,
9007	attrHandle = jQuery.expr.attrHandle,
9008	ruseDefault = /^(?:checked|selected)$/i,
9009	getSetAttribute = support.getSetAttribute,
9010	getSetInput = support.input;
9011
9012jQuery.fn.extend( {
9013	attr: function( name, value ) {
9014		return access( this, jQuery.attr, name, value, arguments.length > 1 );
9015	},
9016
9017	removeAttr: function( name ) {
9018		return this.each( function() {
9019			jQuery.removeAttr( this, name );
9020		} );
9021	}
9022} );
9023
9024jQuery.extend( {
9025	attr: function( elem, name, value ) {
9026		var ret, hooks,
9027			nType = elem.nodeType;
9028
9029		// Don't get/set attributes on text, comment and attribute nodes
9030		if ( nType === 3 || nType === 8 || nType === 2 ) {
9031			return;
9032		}
9033
9034		// Fallback to prop when attributes are not supported
9035		if ( typeof elem.getAttribute === "undefined" ) {
9036			return jQuery.prop( elem, name, value );
9037		}
9038
9039		// All attributes are lowercase
9040		// Grab necessary hook if one is defined
9041		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
9042			name = name.toLowerCase();
9043			hooks = jQuery.attrHooks[ name ] ||
9044				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
9045		}
9046
9047		if ( value !== undefined ) {
9048			if ( value === null ) {
9049				jQuery.removeAttr( elem, name );
9050				return;
9051			}
9052
9053			if ( hooks && "set" in hooks &&
9054				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
9055				return ret;
9056			}
9057
9058			elem.setAttribute( name, value + "" );
9059			return value;
9060		}
9061
9062		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
9063			return ret;
9064		}
9065
9066		ret = jQuery.find.attr( elem, name );
9067
9068		// Non-existent attributes return null, we normalize to undefined
9069		return ret == null ? undefined : ret;
9070	},
9071
9072	attrHooks: {
9073		type: {
9074			set: function( elem, value ) {
9075				if ( !support.radioValue && value === "radio" &&
9076					jQuery.nodeName( elem, "input" ) ) {
9077
9078					// Setting the type on a radio button after the value resets the value in IE8-9
9079					// Reset value to default in case type is set after value during creation
9080					var val = elem.value;
9081					elem.setAttribute( "type", value );
9082					if ( val ) {
9083						elem.value = val;
9084					}
9085					return value;
9086				}
9087			}
9088		}
9089	},
9090
9091	removeAttr: function( elem, value ) {
9092		var name, propName,
9093			i = 0,
9094			attrNames = value && value.match( rnotwhite );
9095
9096		if ( attrNames && elem.nodeType === 1 ) {
9097			while ( ( name = attrNames[ i++ ] ) ) {
9098				propName = jQuery.propFix[ name ] || name;
9099
9100				// Boolean attributes get special treatment (#10870)
9101				if ( jQuery.expr.match.bool.test( name ) ) {
9102
9103					// Set corresponding property to false
9104					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
9105						elem[ propName ] = false;
9106
9107					// Support: IE<9
9108					// Also clear defaultChecked/defaultSelected (if appropriate)
9109					} else {
9110						elem[ jQuery.camelCase( "default-" + name ) ] =
9111							elem[ propName ] = false;
9112					}
9113
9114				// See #9699 for explanation of this approach (setting first, then removal)
9115				} else {
9116					jQuery.attr( elem, name, "" );
9117				}
9118
9119				elem.removeAttribute( getSetAttribute ? name : propName );
9120			}
9121		}
9122	}
9123} );
9124
9125// Hooks for boolean attributes
9126boolHook = {
9127	set: function( elem, value, name ) {
9128		if ( value === false ) {
9129
9130			// Remove boolean attributes when set to false
9131			jQuery.removeAttr( elem, name );
9132		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
9133
9134			// IE<8 needs the *property* name
9135			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
9136
9137		} else {
9138
9139			// Support: IE<9
9140			// Use defaultChecked and defaultSelected for oldIE
9141			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
9142		}
9143		return name;
9144	}
9145};
9146
9147jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
9148	var getter = attrHandle[ name ] || jQuery.find.attr;
9149
9150	if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
9151		attrHandle[ name ] = function( elem, name, isXML ) {
9152			var ret, handle;
9153			if ( !isXML ) {
9154
9155				// Avoid an infinite loop by temporarily removing this function from the getter
9156				handle = attrHandle[ name ];
9157				attrHandle[ name ] = ret;
9158				ret = getter( elem, name, isXML ) != null ?
9159					name.toLowerCase() :
9160					null;
9161				attrHandle[ name ] = handle;
9162			}
9163			return ret;
9164		};
9165	} else {
9166		attrHandle[ name ] = function( elem, name, isXML ) {
9167			if ( !isXML ) {
9168				return elem[ jQuery.camelCase( "default-" + name ) ] ?
9169					name.toLowerCase() :
9170					null;
9171			}
9172		};
9173	}
9174} );
9175
9176// fix oldIE attroperties
9177if ( !getSetInput || !getSetAttribute ) {
9178	jQuery.attrHooks.value = {
9179		set: function( elem, value, name ) {
9180			if ( jQuery.nodeName( elem, "input" ) ) {
9181
9182				// Does not return so that setAttribute is also used
9183				elem.defaultValue = value;
9184			} else {
9185
9186				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
9187				return nodeHook && nodeHook.set( elem, value, name );
9188			}
9189		}
9190	};
9191}
9192
9193// IE6/7 do not support getting/setting some attributes with get/setAttribute
9194if ( !getSetAttribute ) {
9195
9196	// Use this for any attribute in IE6/7
9197	// This fixes almost every IE6/7 issue
9198	nodeHook = {
9199		set: function( elem, value, name ) {
9200
9201			// Set the existing or create a new attribute node
9202			var ret = elem.getAttributeNode( name );
9203			if ( !ret ) {
9204				elem.setAttributeNode(
9205					( ret = elem.ownerDocument.createAttribute( name ) )
9206				);
9207			}
9208
9209			ret.value = value += "";
9210
9211			// Break association with cloned elements by also using setAttribute (#9646)
9212			if ( name === "value" || value === elem.getAttribute( name ) ) {
9213				return value;
9214			}
9215		}
9216	};
9217
9218	// Some attributes are constructed with empty-string values when not defined
9219	attrHandle.id = attrHandle.name = attrHandle.coords =
9220		function( elem, name, isXML ) {
9221			var ret;
9222			if ( !isXML ) {
9223				return ( ret = elem.getAttributeNode( name ) ) && ret.value !== "" ?
9224					ret.value :
9225					null;
9226			}
9227		};
9228
9229	// Fixing value retrieval on a button requires this module
9230	jQuery.valHooks.button = {
9231		get: function( elem, name ) {
9232			var ret = elem.getAttributeNode( name );
9233			if ( ret && ret.specified ) {
9234				return ret.value;
9235			}
9236		},
9237		set: nodeHook.set
9238	};
9239
9240	// Set contenteditable to false on removals(#10429)
9241	// Setting to empty string throws an error as an invalid value
9242	jQuery.attrHooks.contenteditable = {
9243		set: function( elem, value, name ) {
9244			nodeHook.set( elem, value === "" ? false : value, name );
9245		}
9246	};
9247
9248	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
9249	// This is for removals
9250	jQuery.each( [ "width", "height" ], function( i, name ) {
9251		jQuery.attrHooks[ name ] = {
9252			set: function( elem, value ) {
9253				if ( value === "" ) {
9254					elem.setAttribute( name, "auto" );
9255					return value;
9256				}
9257			}
9258		};
9259	} );
9260}
9261
9262if ( !support.style ) {
9263	jQuery.attrHooks.style = {
9264		get: function( elem ) {
9265
9266			// Return undefined in the case of empty string
9267			// Note: IE uppercases css property names, but if we were to .toLowerCase()
9268			// .cssText, that would destroy case sensitivity in URL's, like in "background"
9269			return elem.style.cssText || undefined;
9270		},
9271		set: function( elem, value ) {
9272			return ( elem.style.cssText = value + "" );
9273		}
9274	};
9275}
9276
9277
9278
9279
9280var rfocusable = /^(?:input|select|textarea|button|object)$/i,
9281	rclickable = /^(?:a|area)$/i;
9282
9283jQuery.fn.extend( {
9284	prop: function( name, value ) {
9285		return access( this, jQuery.prop, name, value, arguments.length > 1 );
9286	},
9287
9288	removeProp: function( name ) {
9289		name = jQuery.propFix[ name ] || name;
9290		return this.each( function() {
9291
9292			// try/catch handles cases where IE balks (such as removing a property on window)
9293			try {
9294				this[ name ] = undefined;
9295				delete this[ name ];
9296			} catch ( e ) {}
9297		} );
9298	}
9299} );
9300
9301jQuery.extend( {
9302	prop: function( elem, name, value ) {
9303		var ret, hooks,
9304			nType = elem.nodeType;
9305
9306		// Don't get/set properties on text, comment and attribute nodes
9307		if ( nType === 3 || nType === 8 || nType === 2 ) {
9308			return;
9309		}
9310
9311		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
9312
9313			// Fix name and attach hooks
9314			name = jQuery.propFix[ name ] || name;
9315			hooks = jQuery.propHooks[ name ];
9316		}
9317
9318		if ( value !== undefined ) {
9319			if ( hooks && "set" in hooks &&
9320				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
9321				return ret;
9322			}
9323
9324			return ( elem[ name ] = value );
9325		}
9326
9327		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
9328			return ret;
9329		}
9330
9331		return elem[ name ];
9332	},
9333
9334	propHooks: {
9335		tabIndex: {
9336			get: function( elem ) {
9337
9338				// elem.tabIndex doesn't always return the
9339				// correct value when it hasn't been explicitly set
9340				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
9341				// Use proper attribute retrieval(#12072)
9342				var tabindex = jQuery.find.attr( elem, "tabindex" );
9343
9344				return tabindex ?
9345					parseInt( tabindex, 10 ) :
9346					rfocusable.test( elem.nodeName ) ||
9347						rclickable.test( elem.nodeName ) && elem.href ?
9348							0 :
9349							-1;
9350			}
9351		}
9352	},
9353
9354	propFix: {
9355		"for": "htmlFor",
9356		"class": "className"
9357	}
9358} );
9359
9360// Some attributes require a special call on IE
9361// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
9362if ( !support.hrefNormalized ) {
9363
9364	// href/src property should get the full normalized URL (#10299/#12915)
9365	jQuery.each( [ "href", "src" ], function( i, name ) {
9366		jQuery.propHooks[ name ] = {
9367			get: function( elem ) {
9368				return elem.getAttribute( name, 4 );
9369			}
9370		};
9371	} );
9372}
9373
9374// Support: Safari, IE9+
9375// Accessing the selectedIndex property
9376// forces the browser to respect setting selected
9377// on the option
9378// The getter ensures a default option is selected
9379// when in an optgroup
9380if ( !support.optSelected ) {
9381	jQuery.propHooks.selected = {
9382		get: function( elem ) {
9383			var parent = elem.parentNode;
9384
9385			if ( parent ) {
9386				parent.selectedIndex;
9387
9388				// Make sure that it also works with optgroups, see #5701
9389				if ( parent.parentNode ) {
9390					parent.parentNode.selectedIndex;
9391				}
9392			}
9393			return null;
9394		},
9395		set: function( elem ) {
9396			var parent = elem.parentNode;
9397			if ( parent ) {
9398				parent.selectedIndex;
9399
9400				if ( parent.parentNode ) {
9401					parent.parentNode.selectedIndex;
9402				}
9403			}
9404		}
9405	};
9406}
9407
9408jQuery.each( [
9409	"tabIndex",
9410	"readOnly",
9411	"maxLength",
9412	"cellSpacing",
9413	"cellPadding",
9414	"rowSpan",
9415	"colSpan",
9416	"useMap",
9417	"frameBorder",
9418	"contentEditable"
9419], function() {
9420	jQuery.propFix[ this.toLowerCase() ] = this;
9421} );
9422
9423// IE6/7 call enctype encoding
9424if ( !support.enctype ) {
9425	jQuery.propFix.enctype = "encoding";
9426}
9427
9428
9429
9430
9431var rclass = /[\t\r\n\f]/g;
9432
9433function getClass( elem ) {
9434	return jQuery.attr( elem, "class" ) || "";
9435}
9436
9437jQuery.fn.extend( {
9438	addClass: function( value ) {
9439		var classes, elem, cur, curValue, clazz, j, finalValue,
9440			i = 0;
9441
9442		if ( jQuery.isFunction( value ) ) {
9443			return this.each( function( j ) {
9444				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
9445			} );
9446		}
9447
9448		if ( typeof value === "string" && value ) {
9449			classes = value.match( rnotwhite ) || [];
9450
9451			while ( ( elem = this[ i++ ] ) ) {
9452				curValue = getClass( elem );
9453				cur = elem.nodeType === 1 &&
9454					( " " + curValue + " " ).replace( rclass, " " );
9455
9456				if ( cur ) {
9457					j = 0;
9458					while ( ( clazz = classes[ j++ ] ) ) {
9459						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
9460							cur += clazz + " ";
9461						}
9462					}
9463
9464					// only assign if different to avoid unneeded rendering.
9465					finalValue = jQuery.trim( cur );
9466					if ( curValue !== finalValue ) {
9467						jQuery.attr( elem, "class", finalValue );
9468					}
9469				}
9470			}
9471		}
9472
9473		return this;
9474	},
9475
9476	removeClass: function( value ) {
9477		var classes, elem, cur, curValue, clazz, j, finalValue,
9478			i = 0;
9479
9480		if ( jQuery.isFunction( value ) ) {
9481			return this.each( function( j ) {
9482				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
9483			} );
9484		}
9485
9486		if ( !arguments.length ) {
9487			return this.attr( "class", "" );
9488		}
9489
9490		if ( typeof value === "string" && value ) {
9491			classes = value.match( rnotwhite ) || [];
9492
9493			while ( ( elem = this[ i++ ] ) ) {
9494				curValue = getClass( elem );
9495
9496				// This expression is here for better compressibility (see addClass)
9497				cur = elem.nodeType === 1 &&
9498					( " " + curValue + " " ).replace( rclass, " " );
9499
9500				if ( cur ) {
9501					j = 0;
9502					while ( ( clazz = classes[ j++ ] ) ) {
9503
9504						// Remove *all* instances
9505						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
9506							cur = cur.replace( " " + clazz + " ", " " );
9507						}
9508					}
9509
9510					// Only assign if different to avoid unneeded rendering.
9511					finalValue = jQuery.trim( cur );
9512					if ( curValue !== finalValue ) {
9513						jQuery.attr( elem, "class", finalValue );
9514					}
9515				}
9516			}
9517		}
9518
9519		return this;
9520	},
9521
9522	toggleClass: function( value, stateVal ) {
9523		var type = typeof value;
9524
9525		if ( typeof stateVal === "boolean" && type === "string" ) {
9526			return stateVal ? this.addClass( value ) : this.removeClass( value );
9527		}
9528
9529		if ( jQuery.isFunction( value ) ) {
9530			return this.each( function( i ) {
9531				jQuery( this ).toggleClass(
9532					value.call( this, i, getClass( this ), stateVal ),
9533					stateVal
9534				);
9535			} );
9536		}
9537
9538		return this.each( function() {
9539			var className, i, self, classNames;
9540
9541			if ( type === "string" ) {
9542
9543				// Toggle individual class names
9544				i = 0;
9545				self = jQuery( this );
9546				classNames = value.match( rnotwhite ) || [];
9547
9548				while ( ( className = classNames[ i++ ] ) ) {
9549
9550					// Check each className given, space separated list
9551					if ( self.hasClass( className ) ) {
9552						self.removeClass( className );
9553					} else {
9554						self.addClass( className );
9555					}
9556				}
9557
9558			// Toggle whole class name
9559			} else if ( value === undefined || type === "boolean" ) {
9560				className = getClass( this );
9561				if ( className ) {
9562
9563					// store className if set
9564					jQuery._data( this, "__className__", className );
9565				}
9566
9567				// If the element has a class name or if we're passed "false",
9568				// then remove the whole classname (if there was one, the above saved it).
9569				// Otherwise bring back whatever was previously saved (if anything),
9570				// falling back to the empty string if nothing was stored.
9571				jQuery.attr( this, "class",
9572					className || value === false ?
9573					"" :
9574					jQuery._data( this, "__className__" ) || ""
9575				);
9576			}
9577		} );
9578	},
9579
9580	hasClass: function( selector ) {
9581		var className, elem,
9582			i = 0;
9583
9584		className = " " + selector + " ";
9585		while ( ( elem = this[ i++ ] ) ) {
9586			if ( elem.nodeType === 1 &&
9587				( " " + getClass( elem ) + " " ).replace( rclass, " " )
9588					.indexOf( className ) > -1
9589			) {
9590				return true;
9591			}
9592		}
9593
9594		return false;
9595	}
9596} );
9597
9598
9599
9600
9601// Return jQuery for attributes-only inclusion
9602
9603
9604jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
9605	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
9606	"change select submit keydown keypress keyup error contextmenu" ).split( " " ),
9607	function( i, name ) {
9608
9609	// Handle event binding
9610	jQuery.fn[ name ] = function( data, fn ) {
9611		return arguments.length > 0 ?
9612			this.on( name, null, data, fn ) :
9613			this.trigger( name );
9614	};
9615} );
9616
9617jQuery.fn.extend( {
9618	hover: function( fnOver, fnOut ) {
9619		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
9620	}
9621} );
9622
9623
9624var location = window.location;
9625
9626var nonce = jQuery.now();
9627
9628var rquery = ( /\?/ );
9629
9630
9631
9632var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
9633
9634jQuery.parseJSON = function( data ) {
9635
9636	// Attempt to parse using the native JSON parser first
9637	if ( window.JSON && window.JSON.parse ) {
9638
9639		// Support: Android 2.3
9640		// Workaround failure to string-cast null input
9641		return window.JSON.parse( data + "" );
9642	}
9643
9644	var requireNonComma,
9645		depth = null,
9646		str = jQuery.trim( data + "" );
9647
9648	// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
9649	// after removing valid tokens
9650	return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
9651
9652		// Force termination if we see a misplaced comma
9653		if ( requireNonComma && comma ) {
9654			depth = 0;
9655		}
9656
9657		// Perform no more replacements after returning to outermost depth
9658		if ( depth === 0 ) {
9659			return token;
9660		}
9661
9662		// Commas must not follow "[", "{", or ","
9663		requireNonComma = open || comma;
9664
9665		// Determine new depth
9666		// array/object open ("[" or "{"): depth += true - false (increment)
9667		// array/object close ("]" or "}"): depth += false - true (decrement)
9668		// other cases ("," or primitive): depth += true - true (numeric cast)
9669		depth += !close - !open;
9670
9671		// Remove this token
9672		return "";
9673	} ) ) ?
9674		( Function( "return " + str ) )() :
9675		jQuery.error( "Invalid JSON: " + data );
9676};
9677
9678
9679// Cross-browser xml parsing
9680jQuery.parseXML = function( data ) {
9681	var xml, tmp;
9682	if ( !data || typeof data !== "string" ) {
9683		return null;
9684	}
9685	try {
9686		if ( window.DOMParser ) { // Standard
9687			tmp = new window.DOMParser();
9688			xml = tmp.parseFromString( data, "text/xml" );
9689		} else { // IE
9690			xml = new window.ActiveXObject( "Microsoft.XMLDOM" );
9691			xml.async = "false";
9692			xml.loadXML( data );
9693		}
9694	} catch ( e ) {
9695		xml = undefined;
9696	}
9697	if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
9698		jQuery.error( "Invalid XML: " + data );
9699	}
9700	return xml;
9701};
9702
9703
9704var
9705	rhash = /#.*$/,
9706	rts = /([?&])_=[^&]*/,
9707
9708	// IE leaves an \r character at EOL
9709	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
9710
9711	// #7653, #8125, #8152: local protocol detection
9712	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
9713	rnoContent = /^(?:GET|HEAD)$/,
9714	rprotocol = /^\/\//,
9715	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
9716
9717	/* Prefilters
9718	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
9719	 * 2) These are called:
9720	 *    - BEFORE asking for a transport
9721	 *    - AFTER param serialization (s.data is a string if s.processData is true)
9722	 * 3) key is the dataType
9723	 * 4) the catchall symbol "*" can be used
9724	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
9725	 */
9726	prefilters = {},
9727
9728	/* Transports bindings
9729	 * 1) key is the dataType
9730	 * 2) the catchall symbol "*" can be used
9731	 * 3) selection will start with transport dataType and THEN go to "*" if needed
9732	 */
9733	transports = {},
9734
9735	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
9736	allTypes = "*/".concat( "*" ),
9737
9738	// Document location
9739	ajaxLocation = location.href,
9740
9741	// Segment location into parts
9742	ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
9743
9744// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
9745function addToPrefiltersOrTransports( structure ) {
9746
9747	// dataTypeExpression is optional and defaults to "*"
9748	return function( dataTypeExpression, func ) {
9749
9750		if ( typeof dataTypeExpression !== "string" ) {
9751			func = dataTypeExpression;
9752			dataTypeExpression = "*";
9753		}
9754
9755		var dataType,
9756			i = 0,
9757			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
9758
9759		if ( jQuery.isFunction( func ) ) {
9760
9761			// For each dataType in the dataTypeExpression
9762			while ( ( dataType = dataTypes[ i++ ] ) ) {
9763
9764				// Prepend if requested
9765				if ( dataType.charAt( 0 ) === "+" ) {
9766					dataType = dataType.slice( 1 ) || "*";
9767					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
9768
9769				// Otherwise append
9770				} else {
9771					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
9772				}
9773			}
9774		}
9775	};
9776}
9777
9778// Base inspection function for prefilters and transports
9779function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
9780
9781	var inspected = {},
9782		seekingTransport = ( structure === transports );
9783
9784	function inspect( dataType ) {
9785		var selected;
9786		inspected[ dataType ] = true;
9787		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
9788			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
9789			if ( typeof dataTypeOrTransport === "string" &&
9790				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
9791
9792				options.dataTypes.unshift( dataTypeOrTransport );
9793				inspect( dataTypeOrTransport );
9794				return false;
9795			} else if ( seekingTransport ) {
9796				return !( selected = dataTypeOrTransport );
9797			}
9798		} );
9799		return selected;
9800	}
9801
9802	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
9803}
9804
9805// A special extend for ajax options
9806// that takes "flat" options (not to be deep extended)
9807// Fixes #9887
9808function ajaxExtend( target, src ) {
9809	var deep, key,
9810		flatOptions = jQuery.ajaxSettings.flatOptions || {};
9811
9812	for ( key in src ) {
9813		if ( src[ key ] !== undefined ) {
9814			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
9815		}
9816	}
9817	if ( deep ) {
9818		jQuery.extend( true, target, deep );
9819	}
9820
9821	return target;
9822}
9823
9824/* Handles responses to an ajax request:
9825 * - finds the right dataType (mediates between content-type and expected dataType)
9826 * - returns the corresponding response
9827 */
9828function ajaxHandleResponses( s, jqXHR, responses ) {
9829	var firstDataType, ct, finalDataType, type,
9830		contents = s.contents,
9831		dataTypes = s.dataTypes;
9832
9833	// Remove auto dataType and get content-type in the process
9834	while ( dataTypes[ 0 ] === "*" ) {
9835		dataTypes.shift();
9836		if ( ct === undefined ) {
9837			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
9838		}
9839	}
9840
9841	// Check if we're dealing with a known content-type
9842	if ( ct ) {
9843		for ( type in contents ) {
9844			if ( contents[ type ] && contents[ type ].test( ct ) ) {
9845				dataTypes.unshift( type );
9846				break;
9847			}
9848		}
9849	}
9850
9851	// Check to see if we have a response for the expected dataType
9852	if ( dataTypes[ 0 ] in responses ) {
9853		finalDataType = dataTypes[ 0 ];
9854	} else {
9855
vendor: 5,407 bytes, lines 9856-10085
9856		// Try convertible dataTypes
9857		for ( type in responses ) {
9858			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
9859				finalDataType = type;
9860				break;
9861			}
9862			if ( !firstDataType ) {
9863				firstDataType = type;
9864			}
9865		}
9866
9867		// Or just use first one
9868		finalDataType = finalDataType || firstDataType;
9869	}
9870
9871	// If we found a dataType
9872	// We add the dataType to the list if needed
9873	// and return the corresponding response
9874	if ( finalDataType ) {
9875		if ( finalDataType !== dataTypes[ 0 ] ) {
9876			dataTypes.unshift( finalDataType );
9877		}
9878		return responses[ finalDataType ];
9879	}
9880}
9881
9882/* Chain conversions given the request and the original response
9883 * Also sets the responseXXX fields on the jqXHR instance
9884 */
9885function ajaxConvert( s, response, jqXHR, isSuccess ) {
9886	var conv2, current, conv, tmp, prev,
9887		converters = {},
9888
9889		// Work with a copy of dataTypes in case we need to modify it for conversion
9890		dataTypes = s.dataTypes.slice();
9891
9892	// Create converters map with lowercased keys
9893	if ( dataTypes[ 1 ] ) {
9894		for ( conv in s.converters ) {
9895			converters[ conv.toLowerCase() ] = s.converters[ conv ];
9896		}
9897	}
9898
9899	current = dataTypes.shift();
9900
9901	// Convert to each sequential dataType
9902	while ( current ) {
9903
9904		if ( s.responseFields[ current ] ) {
9905			jqXHR[ s.responseFields[ current ] ] = response;
9906		}
9907
9908		// Apply the dataFilter if provided
9909		if ( !prev && isSuccess && s.dataFilter ) {
9910			response = s.dataFilter( response, s.dataType );
9911		}
9912
9913		prev = current;
9914		current = dataTypes.shift();
9915
9916		if ( current ) {
9917
9918			// There's only work to do if current dataType is non-auto
9919			if ( current === "*" ) {
9920
9921				current = prev;
9922
9923			// Convert response if prev dataType is non-auto and differs from current
9924			} else if ( prev !== "*" && prev !== current ) {
9925
9926				// Seek a direct converter
9927				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
9928
9929				// If none found, seek a pair
9930				if ( !conv ) {
9931					for ( conv2 in converters ) {
9932
9933						// If conv2 outputs current
9934						tmp = conv2.split( " " );
9935						if ( tmp[ 1 ] === current ) {
9936
9937							// If prev can be converted to accepted input
9938							conv = converters[ prev + " " + tmp[ 0 ] ] ||
9939								converters[ "* " + tmp[ 0 ] ];
9940							if ( conv ) {
9941
9942								// Condense equivalence converters
9943								if ( conv === true ) {
9944									conv = converters[ conv2 ];
9945
9946								// Otherwise, insert the intermediate dataType
9947								} else if ( converters[ conv2 ] !== true ) {
9948									current = tmp[ 0 ];
9949									dataTypes.unshift( tmp[ 1 ] );
9950								}
9951								break;
9952							}
9953						}
9954					}
9955				}
9956
9957				// Apply converter (if not an equivalence)
9958				if ( conv !== true ) {
9959
9960					// Unless errors are allowed to bubble, catch and return them
9961					if ( conv && s[ "throws" ] ) { // jscs:ignore requireDotNotation
9962						response = conv( response );
9963					} else {
9964						try {
9965							response = conv( response );
9966						} catch ( e ) {
9967							return {
9968								state: "parsererror",
9969								error: conv ? e : "No conversion from " + prev + " to " + current
9970							};
9971						}
9972					}
9973				}
9974			}
9975		}
9976	}
9977
9978	return { state: "success", data: response };
9979}
9980
9981jQuery.extend( {
9982
9983	// Counter for holding the number of active queries
9984	active: 0,
9985
9986	// Last-Modified header cache for next request
9987	lastModified: {},
9988	etag: {},
9989
9990	ajaxSettings: {
9991		url: ajaxLocation,
9992		type: "GET",
9993		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
9994		global: true,
9995		processData: true,
9996		async: true,
9997		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
9998		/*
9999		timeout: 0,
10000		data: null,
10001		dataType: null,
10002		username: null,
10003		password: null,
10004		cache: null,
10005		throws: false,
10006		traditional: false,
10007		headers: {},
10008		*/
10009
10010		accepts: {
10011			"*": allTypes,
10012			text: "text/plain",
10013			html: "text/html",
10014			xml: "application/xml, text/xml",
10015			json: "application/json, text/javascript"
10016		},
10017
10018		contents: {
10019			xml: /\bxml\b/,
10020			html: /\bhtml/,
10021			json: /\bjson\b/
10022		},
10023
10024		responseFields: {
10025			xml: "responseXML",
10026			text: "responseText",
10027			json: "responseJSON"
10028		},
10029
10030		// Data converters
10031		// Keys separate source (or catchall "*") and destination types with a single space
10032		converters: {
10033
10034			// Convert anything to text
10035			"* text": String,
10036
10037			// Text to html (true = no transformation)
10038			"text html": true,
10039
10040			// Evaluate text as a json expression
10041			"text json": jQuery.parseJSON,
10042
10043			// Parse text as xml
10044			"text xml": jQuery.parseXML
10045		},
10046
10047		// For options that shouldn't be deep extended:
10048		// you can add your own custom options here if
10049		// and when you create one that shouldn't be
10050		// deep extended (see ajaxExtend)
10051		flatOptions: {
10052			url: true,
10053			context: true
10054		}
10055	},
10056
10057	// Creates a full fledged settings object into target
10058	// with both ajaxSettings and settings fields.
10059	// If target is omitted, writes into ajaxSettings.
10060	ajaxSetup: function( target, settings ) {
10061		return settings ?
10062
10063			// Building a settings object
10064			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
10065
10066			// Extending ajaxSettings
10067			ajaxExtend( jQuery.ajaxSettings, target );
10068	},
10069
10070	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
10071	ajaxTransport: addToPrefiltersOrTransports( transports ),
10072
10073	// Main method
10074	ajax: function( url, options ) {
10075
10076		// If url is an object, simulate pre-1.5 signature
10077		if ( typeof url === "object" ) {
10078			options = url;
10079			url = undefined;
10080		}
10081
10082		// Force options to be an object
10083		options = options || {};
10084
10085		var
10086
10087			// Cross-domain detection vars
10088			parts,
10089
10090			// Loop variable
10091			i,
10092
10093			// URL without anti-cache param
10094			cacheURL,
10095
10096			// Response headers as string
10097			responseHeadersString,
10098
10099			// timeout handle
10100			timeoutTimer,
10101
10102			// To know if global events are to be dispatched
10103			fireGlobals,
10104
10105			transport,
10106
10107			// Response headers
10108			responseHeaders,
10109
10110			// Create the final options object
10111			s = jQuery.ajaxSetup( {}, options ),
10112
10113			// Callbacks context
10114			callbackContext = s.context || s,
10115
10116			// Context for global events is callbackContext if it is a DOM node or jQuery collection
10117			globalEventContext = s.context &&
10118				( callbackContext.nodeType || callbackContext.jquery ) ?
10119					jQuery( callbackContext ) :
10120					jQuery.event,
10121
10122			// Deferreds
10123			deferred = jQuery.Deferred(),
10124			completeDeferred = jQuery.Callbacks( "once memory" ),
10125
10126			// Status-dependent callbacks
10127			statusCode = s.statusCode || {},
10128
10129			// Headers (they are sent all at once)
10130			requestHeaders = {},
10131			requestHeadersNames = {},
10132
10133			// The jqXHR state
10134			state = 0,
10135
10136			// Default abort message
10137			strAbort = "canceled",
10138
10139			// Fake xhr
10140			jqXHR = {
10141				readyState: 0,
10142
10143				// Builds headers hashtable if needed
10144				getResponseHeader: function( key ) {
10145					var match;
10146					if ( state === 2 ) {
10147						if ( !responseHeaders ) {
10148							responseHeaders = {};
10149							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
10150								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
10151							}
10152						}
10153						match = responseHeaders[ key.toLowerCase() ];
10154					}
10155					return match == null ? null : match;
10156				},
10157
10158				// Raw string
10159				getAllResponseHeaders: function() {
10160					return state === 2 ? responseHeadersString : null;
10161				},
10162
10163				// Caches the header
10164				setRequestHeader: function( name, value ) {
10165					var lname = name.toLowerCase();
10166					if ( !state ) {
10167						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
10168						requestHeaders[ name ] = value;
10169					}
10170					return this;
10171				},
10172
10173				// Overrides response content-type header
10174				overrideMimeType: function( type ) {
10175					if ( !state ) {
10176						s.mimeType = type;
10177					}
10178					return this;
10179				},
10180
10181				// Status-dependent callbacks
10182				statusCode: function( map ) {
10183					var code;
10184					if ( map ) {
10185						if ( state < 2 ) {
10186							for ( code in map ) {
10187
10188								// Lazy-add the new callback in a way that preserves old ones
10189								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
10190							}
10191						} else {
10192
10193							// Execute the appropriate callbacks
10194							jqXHR.always( map[ jqXHR.status ] );
10195						}
10196					}
10197					return this;
10198				},
10199
10200				// Cancel the request
10201				abort: function( statusText ) {
10202					var finalText = statusText || strAbort;
10203					if ( transport ) {
10204						transport.abort( finalText );
10205					}
10206					done( 0, finalText );
10207					return this;
10208				}
10209			};
10210
10211		// Attach deferreds
10212		deferred.promise( jqXHR ).complete = completeDeferred.add;
10213		jqXHR.success = jqXHR.done;
10214		jqXHR.error = jqXHR.fail;
10215
10216		// Remove hash character (#7531: and string promotion)
10217		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
10218		// Handle falsy url in the settings object (#10093: consistency with old signature)
10219		// We also use the url parameter if available
10220		s.url = ( ( url || s.url || ajaxLocation ) + "" )
10221			.replace( rhash, "" )
10222			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
10223
10224		// Alias method option to type as per ticket #12004
10225		s.type = options.method || options.type || s.method || s.type;
10226
10227		// Extract dataTypes list
10228		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
10229
10230		// A cross-domain request is in order when we have a protocol:host:port mismatch
10231		if ( s.crossDomain == null ) {
10232			parts = rurl.exec( s.url.toLowerCase() );
10233			s.crossDomain = !!( parts &&
10234				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
10235					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
10236						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
10237			);
10238		}
10239
10240		// Convert data if not already a string
10241		if ( s.data && s.processData && typeof s.data !== "string" ) {
10242			s.data = jQuery.param( s.data, s.traditional );
10243		}
10244
10245		// Apply prefilters
10246		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
10247
10248		// If request was aborted inside a prefilter, stop there
10249		if ( state === 2 ) {
10250			return jqXHR;
10251		}
10252
10253		// We can fire global events as of now if asked to
10254		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
10255		fireGlobals = jQuery.event && s.global;
10256
10257		// Watch for a new set of requests
10258		if ( fireGlobals && jQuery.active++ === 0 ) {
10259			jQuery.event.trigger( "ajaxStart" );
10260		}
10261
10262		// Uppercase the type
10263		s.type = s.type.toUpperCase();
10264
10265		// Determine if request has content
10266		s.hasContent = !rnoContent.test( s.type );
10267
10268		// Save the URL in case we're toying with the If-Modified-Since
10269		// and/or If-None-Match header later on
10270		cacheURL = s.url;
10271
10272		// More options handling for requests with no content
10273		if ( !s.hasContent ) {
10274
10275			// If data is available, append data to url
10276			if ( s.data ) {
10277				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
10278
10279				// #9682: remove data so that it's not used in an eventual retry
10280				delete s.data;
10281			}
10282
10283			// Add anti-cache in url if needed
10284			if ( s.cache === false ) {
10285				s.url = rts.test( cacheURL ) ?
10286
10287					// If there is already a '_' parameter, set its value
10288					cacheURL.replace( rts, "$1_=" + nonce++ ) :
10289
10290					// Otherwise add one to the end
10291					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
10292			}
10293		}
10294
10295		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
10296		if ( s.ifModified ) {
10297			if ( jQuery.lastModified[ cacheURL ] ) {
10298				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
10299			}
10300			if ( jQuery.etag[ cacheURL ] ) {
10301				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
10302			}
10303		}
10304
10305		// Set the correct header, if data is being sent
10306		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
10307			jqXHR.setRequestHeader( "Content-Type", s.contentType );
10308		}
10309
10310		// Set the Accepts header for the server, depending on the dataType
10311		jqXHR.setRequestHeader(
10312			"Accept",
10313			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
10314				s.accepts[ s.dataTypes[ 0 ] ] +
10315					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
10316				s.accepts[ "*" ]
10317		);
10318
10319		// Check for headers option
10320		for ( i in s.headers ) {
10321			jqXHR.setRequestHeader( i, s.headers[ i ] );
10322		}
10323
10324		// Allow custom headers/mimetypes and early abort
10325		if ( s.beforeSend &&
10326			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
10327
10328			// Abort if not done already and return
10329			return jqXHR.abort();
10330		}
10331
10332		// aborting is no longer a cancellation
10333		strAbort = "abort";
10334
10335		// Install callbacks on deferreds
10336		for ( i in { success: 1, error: 1, complete: 1 } ) {
10337			jqXHR[ i ]( s[ i ] );
10338		}
10339
10340		// Get transport
10341		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
10342
10343		// If no transport, we auto-abort
10344		if ( !transport ) {
10345			done( -1, "No Transport" );
10346		} else {
10347			jqXHR.readyState = 1;
10348
10349			// Send global event
10350			if ( fireGlobals ) {
10351				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
10352			}
10353
10354			// If request was aborted inside ajaxSend, stop there
10355			if ( state === 2 ) {
10356				return jqXHR;
10357			}
10358
10359			// Timeout
10360			if ( s.async && s.timeout > 0 ) {
10361				timeoutTimer = window.setTimeout( function() {
10362					jqXHR.abort( "timeout" );
10363				}, s.timeout );
10364			}
10365
10366			try {
10367				state = 1;
10368				transport.send( requestHeaders, done );
10369			} catch ( e ) {
10370
10371				// Propagate exception as error if not done
10372				if ( state < 2 ) {
10373					done( -1, e );
10374
10375				// Simply rethrow otherwise
10376				} else {
10377					throw e;
10378				}
10379			}
10380		}
10381
10382		// Callback for when everything is done
10383		function done( status, nativeStatusText, responses, headers ) {
10384			var isSuccess, success, error, response, modified,
10385				statusText = nativeStatusText;
10386
10387			// Called once
10388			if ( state === 2 ) {
10389				return;
10390			}
10391
10392			// State is "done" now
10393			state = 2;
10394
10395			// Clear timeout if it exists
10396			if ( timeoutTimer ) {
10397				window.clearTimeout( timeoutTimer );
10398			}
10399
10400			// Dereference transport for early garbage collection
10401			// (no matter how long the jqXHR object will be used)
10402			transport = undefined;
10403
10404			// Cache response headers
10405			responseHeadersString = headers || "";
10406
10407			// Set readyState
10408			jqXHR.readyState = status > 0 ? 4 : 0;
10409
10410			// Determine if successful
10411			isSuccess = status >= 200 && status < 300 || status === 304;
10412
10413			// Get response data
10414			if ( responses ) {
10415				response = ajaxHandleResponses( s, jqXHR, responses );
10416			}
10417
10418			// Convert no matter what (that way responseXXX fields are always set)
10419			response = ajaxConvert( s, response, jqXHR, isSuccess );
10420
10421			// If successful, handle type chaining
10422			if ( isSuccess ) {
10423
10424				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
10425				if ( s.ifModified ) {
10426					modified = jqXHR.getResponseHeader( "Last-Modified" );
10427					if ( modified ) {
10428						jQuery.lastModified[ cacheURL ] = modified;
10429					}
10430					modified = jqXHR.getResponseHeader( "etag" );
10431					if ( modified ) {
10432						jQuery.etag[ cacheURL ] = modified;
10433					}
10434				}
10435
10436				// if no content
10437				if ( status === 204 || s.type === "HEAD" ) {
10438					statusText = "nocontent";
10439
10440				// if not modified
10441				} else if ( status === 304 ) {
10442					statusText = "notmodified";
10443
10444				// If we have data, let's convert it
10445				} else {
10446					statusText = response.state;
10447					success = response.data;
10448					error = response.error;
10449					isSuccess = !error;
10450				}
10451			} else {
10452
10453				// We extract error from statusText
10454				// then normalize statusText and status for non-aborts
10455				error = statusText;
10456				if ( status || !statusText ) {
10457					statusText = "error";
10458					if ( status < 0 ) {
10459						status = 0;
10460					}
10461				}
10462			}
10463
10464			// Set data for the fake xhr object
10465			jqXHR.status = status;
10466			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
10467
10468			// Success/Error
10469			if ( isSuccess ) {
10470				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
10471			} else {
10472				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
10473			}
10474
10475			// Status-dependent callbacks
10476			jqXHR.statusCode( statusCode );
10477			statusCode = undefined;
10478
10479			if ( fireGlobals ) {
10480				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
10481					[ jqXHR, s, isSuccess ? success : error ] );
10482			}
10483
10484			// Complete
10485			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
10486
10487			if ( fireGlobals ) {
10488				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
10489
10490				// Handle the global AJAX counter
10491				if ( !( --jQuery.active ) ) {
10492					jQuery.event.trigger( "ajaxStop" );
10493				}
10494			}
10495		}
10496
10497		return jqXHR;
10498	},
10499
10500	getJSON: function( url, data, callback ) {
10501		return jQuery.get( url, data, callback, "json" );
10502	},
10503
10504	getScript: function( url, callback ) {
10505		return jQuery.get( url, undefined, callback, "script" );
10506	}
10507} );
10508
10509jQuery.each( [ "get", "post" ], function( i, method ) {
10510	jQuery[ method ] = function( url, data, callback, type ) {
10511
10512		// shift arguments if data argument was omitted
10513		if ( jQuery.isFunction( data ) ) {
10514			type = type || callback;
10515			callback = data;
10516			data = undefined;
10517		}
10518
10519		// The url can be an options object (which then must have .url)
10520		return jQuery.ajax( jQuery.extend( {
10521			url: url,
10522			type: method,
10523			dataType: type,
10524			data: data,
10525			success: callback
10526		}, jQuery.isPlainObject( url ) && url ) );
10527	};
10528} );
10529
10530
10531jQuery._evalUrl = function( url ) {
10532	return jQuery.ajax( {
10533		url: url,
10534
10535		// Make this explicit, since user can override this through ajaxSetup (#11264)
10536		type: "GET",
10537		dataType: "script",
10538		cache: true,
10539		async: false,
10540		global: false,
10541		"throws": true
10542	} );
10543};
10544
10545
10546jQuery.fn.extend( {
10547	wrapAll: function( html ) {
10548		if ( jQuery.isFunction( html ) ) {
10549			return this.each( function( i ) {
10550				jQuery( this ).wrapAll( html.call( this, i ) );
10551			} );
10552		}
10553
10554		if ( this[ 0 ] ) {
10555
10556			// The elements to wrap the target around
10557			var wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
10558
10559			if ( this[ 0 ].parentNode ) {
10560				wrap.insertBefore( this[ 0 ] );
10561			}
10562
10563			wrap.map( function() {
10564				var elem = this;
10565
10566				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
10567					elem = elem.firstChild;
10568				}
10569
10570				return elem;
10571			} ).append( this );
10572		}
10573
10574		return this;
10575	},
10576
10577	wrapInner: function( html ) {
10578		if ( jQuery.isFunction( html ) ) {
10579			return this.each( function( i ) {
10580				jQuery( this ).wrapInner( html.call( this, i ) );
10581			} );
10582		}
10583
10584		return this.each( function() {
10585			var self = jQuery( this ),
10586				contents = self.contents();
10587
10588			if ( contents.length ) {
10589				contents.wrapAll( html );
10590
10591			} else {
10592				self.append( html );
10593			}
10594		} );
10595	},
10596
10597	wrap: function( html ) {
10598		var isFunction = jQuery.isFunction( html );
10599
10600		return this.each( function( i ) {
10601			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
10602		} );
10603	},
10604
10605	unwrap: function() {
10606		return this.parent().each( function() {
10607			if ( !jQuery.nodeName( this, "body" ) ) {
10608				jQuery( this ).replaceWith( this.childNodes );
10609			}
10610		} ).end();
10611	}
10612} );
10613
10614
10615function getDisplay( elem ) {
10616	return elem.style && elem.style.display || jQuery.css( elem, "dis
10616play" );
10617}
10618
10619function filterHidden( elem ) {
10620
10621	// Disconnected elements are considered hidden
10622	if ( !jQuery.contains( elem.ownerDocument || document, elem ) ) {
10623		return true;
10624	}
10625	while ( elem && elem.nodeType === 1 ) {
10626		if ( getDisplay( elem ) === "none" || elem.type === "hidden" ) {
10627			return true;
10628		}
10629		elem = elem.parentNode;
10630	}
10631	return false;
10632}
10633
10634jQuery.expr.filters.hidden = function( elem ) {
10635
10636	// Support: Opera <= 12.12
10637	// Opera reports offsetWidths and offsetHeights less than zero on some elements
10638	return support.reliableHiddenOffsets() ?
10639		( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&
10640			!elem.getClientRects().length ) :
10641			filterHidden( elem );
10642};
10643
10644jQuery.expr.filters.visible = function( elem ) {
10645	return !jQuery.expr.filters.hidden( elem );
10646};
10647
10648
10649
10650
10651var r20 = /%20/g,
10652	rbracket = /\[\]$/,
10653	rCRLF = /\r?\n/g,
10654	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
10655	rsubmittable = /^(?:input|select|textarea|keygen)/i;
10656
10657function buildParams( prefix, obj, traditional, add ) {
10658	var name;
10659
10660	if ( jQuery.isArray( obj ) ) {
10661
10662		// Serialize array item.
10663		jQuery.each( obj, function( i, v ) {
10664			if ( traditional || rbracket.test( prefix ) ) {
10665
10666				// Treat each array item as a scalar.
10667				add( prefix, v );
10668
10669			} else {
10670
10671				// Item is non-scalar (array or object), encode its numeric index.
10672				buildParams(
10673					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
10674					v,
10675					traditional,
10676					add
10677				);
10678			}
10679		} );
10680
10681	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
10682
10683		// Serialize object item.
10684		for ( name in obj ) {
10685			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
10686		}
10687
10688	} else {
10689
10690		// Serialize scalar item.
10691		add( prefix, obj );
10692	}
10693}
10694
10695// Serialize an array of form elements or a set of
10696// key/values into a query string
10697jQuery.param = function( a, traditional ) {
10698	var prefix,
10699		s = [],
10700		add = function( key, value ) {
10701
10702			// If value is a function, invoke it and return its value
10703			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
10704			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
10705		};
10706
10707	// Set traditional to true for jQuery <= 1.3.2 behavior.
10708	if ( traditional === undefined ) {
10709		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
10710	}
10711
10712	// If an array was passed in, assume that it is an array of form elements.
10713	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
10714
10715		// Serialize the form elements
10716		jQuery.each( a, function() {
10717			add( this.name, this.value );
10718		} );
10719
10720	} else {
10721
10722		// If traditional, encode the "old" way (the way 1.3.2 or older
10723		// did it), otherwise encode params recursively.
10724		for ( prefix in a ) {
10725			buildParams( prefix, a[ prefix ], traditional, add );
10726		}
10727	}
10728
10729	// Return the resulting serialization
10730	return s.join( "&" ).replace( r20, "+" );
10731};
10732
10733jQuery.fn.extend( {
10734	serialize: function() {
10735		return jQuery.param( this.serializeArray() );
10736	},
10737	serializeArray: function() {
10738		return this.map( function() {
10739
10740			// Can add propHook for "elements" to filter or add form elements
10741			var elements = jQuery.prop( this, "elements" );
10742			return elements ? jQuery.makeArray( elements ) : this;
10743		} )
10744		.filter( function() {
10745			var type = this.type;
10746
10747			// Use .is(":disabled") so that fieldset[disabled] works
10748			return this.name && !jQuery( this ).is( ":disabled" ) &&
10749				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
10750				( this.checked || !rcheckableType.test( type ) );
10751		} )
10752		.map( function( i, elem ) {
10753			var val = jQuery( this ).val();
10754
10755			return val == null ?
10756				null :
10757				jQuery.isArray( val ) ?
10758					jQuery.map( val, function( val ) {
10759						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
10760					} ) :
10761					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
10762		} ).get();
10763	}
10764} );
10765
10766
10767// Create the request object
10768// (This is still attached to ajaxSettings for backward compatibility)
10769jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
10770
10771	// Support: IE6-IE8
10772	function() {
10773
10774		// XHR cannot access local files, always use ActiveX for that case
10775		if ( this.isLocal ) {
10776			return createActiveXHR();
10777		}
10778
10779		// Support: IE 9-11
10780		// IE seems to error on cross-domain PATCH requests when ActiveX XHR
10781		// is used. In IE 9+ always use the native XHR.
10782		// Note: this condition won't catch Edge as it doesn't define
10783		// document.documentMode but it also doesn't support ActiveX so it won't
10784		// reach this code.
10785		if ( document.documentMode > 8 ) {
10786			return createStandardXHR();
10787		}
10788
10789		// Support: IE<9
10790		// oldIE XHR does not support non-RFC2616 methods (#13240)
10791		// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
10792		// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
10793		// Although this check for six methods instead of eight
10794		// since IE also does not support "trace" and "connect"
10795		return /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
10796			createStandardXHR() || createActiveXHR();
10797	} :
10798
10799	// For all other browsers, use the standard XMLHttpRequest object
10800	createStandardXHR;
10801
10802var xhrId = 0,
10803	xhrCallbacks = {},
10804	xhrSupported = jQuery.ajaxSettings.xhr();
10805
10806// Support: IE<10
10807// Open requests must be manually aborted on unload (#5280)
10808// See https://support.microsoft.com/kb/2856746 for more info
10809if ( window.attachEvent ) {
10810	window.attachEvent( "onunload", function() {
10811		for ( var key in xhrCallbacks ) {
10812			xhrCallbacks[ key ]( undefined, true );
10813		}
10814	} );
10815}
10816
10817// Determine support properties
10818support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
10819xhrSupported = support.ajax = !!xhrSupported;
10820
10821// Create transport if the browser can provide an xhr
10822if ( xhrSupported ) {
10823
10824	jQuery.ajaxTransport( function( options ) {
10825
10826		// Cross domain only allowed if supported through XMLHttpRequest
10827		if ( !options.crossDomain || support.cors ) {
10828
10829			var callback;
10830
10831			return {
10832				send: function( headers, complete ) {
10833					var i,
10834						xhr = options.xhr(),
10835						id = ++xhrId;
10836
10837					// Open the socket
10838					xhr.open(
10839						options.type,
10840						options.url,
10841						options.async,
10842						options.username,
10843						options.password
10844					);
10845
10846					// Apply custom fields if provided
10847					if ( options.xhrFields ) {
10848						for ( i in options.xhrFields ) {
10849							xhr[ i ] = options.xhrFields[ i ];
10850						}
10851					}
10852
10853					// Override mime type if needed
10854					if ( options.mimeType && xhr.overrideMimeType ) {
10855						xhr.overrideMimeType( options.mimeType );
10856					}
10857
10858					// X-Requested-With header
10859					// For cross-domain requests, seeing as conditions for a preflight are
10860					// akin to a jigsaw puzzle, we simply never set it to be sure.
10861					// (it can always be set on a per-request basis or even using ajaxSetup)
10862					// For same-domain requests, won't change header if already provided.
10863					if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
10864						headers[ "X-Requested-With" ] = "XMLHttpRequest";
10865					}
10866
10867					// Set headers
10868					for ( i in headers ) {
10869
10870						// Support: IE<9
10871						// IE's ActiveXObject throws a 'Type Mismatch' exception when setting
10872						// request header to a null-value.
10873						//
10874						// To keep consistent with other XHR implementations, cast the value
10875						// to string and ignore `undefined`.
10876						if ( headers[ i ] !== undefined ) {
10877							xhr.setRequestHeader( i, headers[ i ] + "" );
10878						}
10879					}
10880
10881					// Do send the request
10882					// This may raise an exception which is actually
10883					// handled in jQuery.ajax (so no try/catch here)
10884					xhr.send( ( options.hasContent && options.data ) || null );
10885
10886					// Listener
10887					callback = function( _, isAbort ) {
10888						var status, statusText, responses;
10889
10890						// Was never called and is aborted or complete
10891						if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
10892
10893							// Clean up
10894							delete xhrCallbacks[ id ];
10895							callback = undefined;
10896							xhr.onreadystatechange = jQuery.noop;
10897
10898							// Abort manually if needed
10899							if ( isAbort ) {
10900								if ( xhr.readyState !== 4 ) {
10901									xhr.abort();
10902								}
10903							} else {
10904								responses = {};
10905								status = xhr.status;
10906
10907								// Support: IE<10
10908								// Accessing binary-data responseText throws an exception
10909								// (#11426)
10910								if ( typeof xhr.responseText === "string" ) {
10911									responses.text = xhr.responseText;
10912								}
10913
10914								// Firefox throws an exception when accessing
10915								// statusText for faulty cross-domain requests
10916								try {
10917									statusText = xhr.statusText;
10918								} catch ( e ) {
10919
10920									// We normalize with Webkit giving an empty statusText
10921									statusText = "";
10922								}
10923
10924								// Filter status for non standard behaviors
10925
10926								// If the request is local and we have data: assume a success
10927								// (success with no data won't get notified, that's the best we
10928								// can do given current implementations)
10929								if ( !status && options.isLocal && !options.crossDomain ) {
10930									status = responses.text ? 200 : 404;
10931
10932								// IE - #1450: sometimes returns 1223 when it should be 204
10933								} else if ( status === 1223 ) {
10934									status = 204;
10935								}
10936							}
10937						}
10938
10939						// Call complete if needed
10940						if ( responses ) {
10941							complete( status, statusText, responses, xhr.getAllResponseHeaders() );
10942						}
10943					};
10944
10945					// Do send the request
10946					// `xhr.send` may raise an exception, but it will be
10947					// handled in jQuery.ajax (so no try/catch here)
10948					if ( !options.async ) {
10949
10950						// If we're in sync mode we fire the callback
10951						callback();
10952					} else if ( xhr.readyState === 4 ) {
10953
10954						// (IE6 & IE7) if it's in cache and has been
10955						// retrieved directly we need to fire the callback
10956						window.setTimeout( callback );
10957					} else {
10958
10959						// Register the callback, but delay it in case `xhr.send` throws
10960						// Add to the list of active xhr callbacks
10961						xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
10962					}
10963				},
10964
10965				abort: function() {
10966					if ( callback ) {
10967						callback( undefined, true );
10968					}
10969				}
10970			};
10971		}
10972	} );
10973}
10974
10975// Functions to create xhrs
10976function createStandardXHR() {
10977	try {
10978		return new window.XMLHttpRequest();
10979	} catch ( e ) {}
10980}
10981
10982function createActiveXHR() {
10983	try {
10984		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
10985	} catch ( e ) {}
10986}
10987
10988
10989
10990
10991// Install script dataType
10992jQuery.ajaxSetup( {
10993	accepts: {
10994		script: "text/javascript, application/javascript, " +
10995			"application/ecmascript, application/x-ecmascript"
10996	},
10997	contents: {
10998		script: /\b(?:java|ecma)script\b/
10999	},
11000	converters: {
11001		"text script": function( text ) {
11002			jQuery.globalEval( text );
11003			return text;
11004		}
11005	}
11006} );
11007
11008// Handle cache's special case and global
11009jQuery.ajaxPrefilter( "script", function( s ) {
11010	if ( s.cache === undefined ) {
11011		s.cache = false;
11012	}
11013	if ( s.crossDomain ) {
11014		s.type = "GET";
11015		s.global = false;
11016	}
11017} );
11018
11019// Bind script tag hack transport
11020jQuery.ajaxTransport( "script", function( s ) {
11021
11022	// This transport only deals with cross domain requests
11023	if ( s.crossDomain ) {
11024
11025		var script,
11026			head = document.head || jQuery( "head" )[ 0 ] || document.documentElement;
11027
11028		return {
11029
11030			send: function( _, callback ) {
11031
11032				script = document.createElement( "script" );
11033
11034				script.async = true;
11035
11036				if ( s.scriptCharset ) {
11037					script.charset = s.scriptCharset;
11038				}
11039
11040				script.src = s.url;
11041
11042				// Attach handlers for all browsers
11043				script.onload = script.onreadystatechange = function( _, isAbort ) {
11044
11045					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
11046
11047						// Handle memory leak in IE
11048						script.onload = script.onreadystatechange = null;
11049
11050						// Remove the script
11051						if ( script.parentNode ) {
11052							script.parentNode.removeChild( script );
11053						}
11054
11055						// Dereference the script
11056						script = null;
11057
11058						// Callback if not abort
11059						if ( !isAbort ) {
11060							callback( 200, "success" );
11061						}
11062					}
11063				};
11064
11065				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
11066				// Use native DOM manipulation to avoid our domManip AJAX trickery
11067				head.insertBefore( script, head.firstChild );
11068			},
11069
11070			abort: function() {
11071				if ( script ) {
11072					script.onload( undefined, true );
11073				}
11074			}
11075		};
11076	}
11077} );
11078
11079
11080
11081
11082var oldCallbacks = [],
11083	rjsonp = /(=)\?(?=&|$)|\?\?/;
11084
11085// Default jsonp settings
11086jQuery.ajaxSetup( {
11087	jsonp: "callback",
11088	jsonpCallback: function() {
11089		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
11090		this[ callback ] = true;
11091		return callback;
11092	}
11093} );
11094
11095// Detect, normalize options and install callbacks for jsonp requests
11096jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
11097
11098	var callbackName, overwritten, responseContainer,
11099		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
11100			"url" :
11101			typeof s.data === "string" &&
11102				( s.contentType || "" )
11103					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
11104				rjsonp.test( s.data ) && "data"
11105		);
11106
11107	// Handle iff the expected data type is "jsonp" or we have a parameter to set
11108	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
11109
11110		// Get callback name, remembering preexisting value associated with it
11111		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
11112			s.jsonpCallback() :
11113			s.jsonpCallback;
11114
11115		// Insert callback into url or form data
11116		if ( jsonProp ) {
11117			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
11118		} else if ( s.jsonp !== false ) {
11119			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
11120		}
11121
11122		// Use data converter to retrieve json after script execution
11123		s.converters[ "script json" ] = function() {
11124			if ( !responseContainer ) {
11125				jQuery.error( callbackName + " was not called" );
11126			}
11127			return responseContainer[ 0 ];
11128		};
11129
11130		// force json dataType
11131		s.dataTypes[ 0 ] = "json";
11132
11133		// Install callback
11134		overwritten = window[ callbackName ];
11135		window[ callbackName ] = function() {
11136			responseContainer = arguments;
11137		};
11138
11139		// Clean-up function (fires after converters)
11140		jqXHR.always( function() {
11141
11142			// If previous value didn't exist - remove it
11143			if ( overwritten === undefined ) {
11144				jQuery( window ).removeProp( callbackName );
11145
11146			// Otherwise restore preexisting value
11147			} else {
11148				window[ callbackName ] = overwritten;
11149			}
11150
11151			// Save back as free
11152			if ( s[ callbackName ] ) {
11153
11154				// make sure that re-using the options doesn't screw things around
11155				s.jsonpCallback = originalSettings.jsonpCallback;
11156
11157				// save the callback name for future use
11158				oldCallbacks.push( callbackName );
11159			}
11160
11161			// Call if it was a function and we have a response
11162			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
11163				overwritten( responseContainer[ 0 ] );
11164			}
11165
11166			responseContainer = overwritten = undefined;
11167		} );
11168
11169		// Delegate to script
11170		return "script";
11171	}
11172} );
11173
11174
11175
11176
11177// data: string of html
11178// context (optional): If specified, the fragment will be created in this context,
11179// defaults to document
11180// keepScripts (optional): If true, will include scripts passed in the html string
11181jQuery.parseHTML = function( data, context, keepScripts ) {
11182	if ( !data || typeof data !== "string" ) {
11183		return null;
11184	}
11185	if ( typeof context === "boolean" ) {
11186		keepScripts = context;
11187		context = false;
11188	}
11189	context = context || document;
11190
11191	var parsed = rsingleTag.exec( data ),
11192		scripts = !keepScripts && [];
11193
11194	// Single tag
11195	if ( parsed ) {
11196		return [ context.createElement( parsed[ 1 ] ) ];
11197	}
11198
11199	parsed = buildFragment( [ data ], context, scripts );
11200
11201	if ( scripts && scripts.length ) {
11202		jQuery( scripts ).remove();
11203	}
11204
11205	return jQuery.merge( [], parsed.childNodes );
11206};
11207
11208
11209// Keep a copy of the old load method
11210var _load = jQuery.fn.load;
11211
11212/**
11213 * Load a url into a page
11214 */
11215jQuery.fn.load = function( url, params, callback ) {
11216	if ( typeof url !== "string" && _load ) {
11217		return _load.apply( this, arguments );
11218	}
11219
11220	var selector, type, response,
11221		self = this,
11222		off = url.indexOf( " " );
11223
11224	if ( off > -1 ) {
11225		selector = jQuery.trim( url.slice( off, url.length ) );
11226		url = url.slice( 0, off );
11227	}
11228
11229	// If it's a function
11230	if ( jQuery.isFunction( params ) ) {
11231
11232		// We assume that it's the callback
11233		callback = params;
11234		params = undefined;
11235
11236	// Otherwise, build a param string
11237	} else if ( params && typeof params === "object" ) {
11238		type = "POST";
11239	}
11240
11241	// If we have elements to modify, make the request
11242	if ( self.length > 0 ) {
11243		jQuery.ajax( {
11244			url: url,
11245
11246			// If "type" variable is undefined, then "GET" method will be used.
11247			// Make value of this field explicit since
11248			// user can override it through ajaxSetup method
11249			type: type || "GET",
11250			dataType: "html",
11251			data: params
11252		} ).done( function( responseText ) {
11253
11254			// Save response for use in complete callback
11255			response = arguments;
11256
11257			self.html( selector ?
11258
11259				// If a selector was specified, locate the right elements in a dummy div
11260				// Exclude scripts to avoid IE 'Permission Denied' errors
11261				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
11262
11263				// Otherwise use the full result
11264				responseText );
11265
11266		// If the request succeeds, this function gets "data", "status", "jqXHR"
11267		// but they are ignored because response was set above.
11268		// If it fails, this function gets "jqXHR", "status", "error"
11269		} ).always( callback && function( jqXHR, status ) {
11270			self.each( function() {
11271				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
11272			} );
11273		} );
11274	}
11275
11276	return this;
11277};
11278
11279
11280
11281
11282// Attach a bunch of functions for handling common AJAX events
11283jQuery.each( [
11284	"ajaxStart",
11285	"ajaxStop",
11286	"ajaxComplete",
11287	"ajaxError",
11288	"ajaxSuccess",
11289	"ajaxSend"
11290], function( i, type ) {
11291	jQuery.fn[ type ] = function( fn ) {
11292		return this.on( type, fn );
11293	};
11294} );
11295
11296
11297
11298
11299jQuery.expr.filters.animated = function( elem ) {
11300	return jQuery.grep( jQuery.timers, function( fn ) {
11301		return elem === fn.elem;
11302	} ).length;
11303};
11304
11305
11306
11307
11308
11309/**
11310 * Gets a window from an element
11311 */
11312function getWindow( elem ) {
11313	return jQuery.isWindow( elem ) ?
11314		elem :
11315		elem.nodeType === 9 ?
11316			elem.defaultView || elem.parentWindow :
11317			false;
11318}
11319
11320jQuery.offset = {
11321	setOffset: function( elem, options, i ) {
11322		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
11323			position = jQuery.css( elem, "position" ),
11324			curElem = jQuery( elem ),
11325			props = {};
11326
11327		// set position first, in-case top/left are set even on static elem
11328		if ( position === "static" ) {
11329			elem.style.position = "relative";
11330		}
11331
11332		curOffset = curElem.offset();
11333		curCSSTop = jQuery.css( elem, "top" );
11334		curCSSLeft = jQuery.css( elem, "left" );
11335		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
11336			jQuery.inArray( "auto", [ curCSSTop, curCSSLeft ] ) > -1;
11337
11338		// need to be able to calculate position if either top or left
11339		// is auto and position is either absolute or fixed
11340		if ( calculatePosition ) {
11341			curPosition = curElem.position();
11342			curTop = curPosition.top;
11343			curLeft = curPosition.left;
11344		} else {
11345			curTop = parseFloat( curCSSTop ) || 0;
11346			curLeft = parseFloat( curCSSLeft ) || 0;
11347		}
11348
11349		if ( jQuery.isFunction( options ) ) {
11350
11351			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
11352			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
11353		}
11354
11355		if ( options.top != null ) {
11356			props.top = ( options.top - curOffset.top ) + curTop;
11357		}
11358		if ( options.left != null ) {
11359			props.left = ( options.left - curOffset.left ) + curLeft;
11360		}
11361
11362		if ( "using" in options ) {
11363			options.using.call( elem, props );
11364		} else {
11365			curElem.css( props );
11366		}
11367	}
11368};
11369
11370jQuery.fn.extend( {
11371	offset: function( options ) {
11372		if ( arguments.length ) {
11373			return options === undefined ?
11374				this :
11375				this.each( function( i ) {
11376					jQuery.offset.setOffset( this, options, i );
11377				} );
11378		}
11379
11380		var docElem, win,
11381			box = { top: 0, left: 0 },
11382			elem = this[ 0 ],
11383			doc = elem && elem.ownerDocument;
11384
11385		if ( !doc ) {
11386			return;
11387		}
11388
11389		docElem = doc.documentElement;
11390
11391		// Make sure it's not a disconnected DOM node
11392		if ( !jQuery.contains( docElem, elem ) ) {
11393			return box;
11394		}
11395
11396		// If we don't have gBCR, just use 0,0 rather than error
11397		// BlackBerry 5, iOS 3 (original iPhone)
11398		if ( typeof elem.getBoundingClientRect !== "undefined" ) {
11399			box = elem.getBoundingClientRect();
11400		}
11401		win = getWindow( doc );
11402		return {
11403			top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
11404			left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
11405		};
11406	},
11407
11408	position: function() {
11409		if ( !this[ 0 ] ) {
11410			return;
11411		}
11412
11413		var offsetParent, offset,
11414			parentOffset = { top: 0, left: 0 },
11415			elem = this[ 0 ];
11416
11417		// Fixed elements are offset from window (parentOffset = {top:0, left
11417: 0},
11418		// because it is its only offset parent
11419		if ( jQuery.css( elem, "position" ) === "fixed" ) {
11420
11421			// we assume that getBoundingClientRect is available when computed position is fixed
11422			offset = elem.getBoundingClientRect();
11423		} else {
11424
11425			// Get *real* offsetParent
11426			offsetParent = this.offsetParent();
11427
11428			// Get correct offsets
11429			offset = this.offset();
11430			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
11431				parentOffset = offsetParent.offset();
11432			}
11433
11434			// Add offsetParent borders
11435			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
11436			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
11437		}
11438
11439		// Subtract parent offsets and element margins
11440		// note: when an element has margin: auto the offsetLeft and marginLeft
11441		// are the same in Safari causing offset.left to incorrectly be 0
11442		return {
11443			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
11444			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
11445		};
11446	},
11447
11448	offsetParent: function() {
11449		return this.map( function() {
11450			var offsetParent = this.offsetParent;
11451
11452			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) &&
11453				jQuery.css( offsetParent, "position" ) === "static" ) ) {
11454				offsetParent = offsetParent.offsetParent;
11455			}
11456			return offsetParent || documentElement;
11457		} );
11458	}
11459} );
11460
11461// Create scrollLeft and scrollTop methods
11462jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
11463	var top = /Y/.test( prop );
11464
11465	jQuery.fn[ method ] = function( val ) {
11466		return access( this, function( elem, method, val ) {
11467			var win = getWindow( elem );
11468
11469			if ( val === undefined ) {
11470				return win ? ( prop in win ) ? win[ prop ] :
11471					win.document.documentElement[ method ] :
11472					elem[ method ];
11473			}
11474
11475			if ( win ) {
11476				win.scrollTo(
11477					!top ? val : jQuery( win ).scrollLeft(),
11478					top ? val : jQuery( win ).scrollTop()
11479				);
11480
11481			} else {
11482				elem[ method ] = val;
11483			}
11484		}, method, val, arguments.length, null );
11485	};
11486} );
11487
11488// Support: Safari<7-8+, Chrome<37-44+
11489// Add the top/left cssHooks using jQuery.fn.position
11490// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
11491// getComputedStyle returns percent when specified for top/left/bottom/right
11492// rather than make the css module depend on the offset module, we just check for it here
11493jQuery.each( [ "top", "left" ], function( i, prop ) {
11494	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
11495		function( elem, computed ) {
11496			if ( computed ) {
11497				computed = curCSS( elem, prop );
11498
11499				// if curCSS returns percentage, fallback to offset
11500				return rnumnonpx.test( computed ) ?
11501					jQuery( elem ).position()[ prop ] + "px" :
11502					computed;
11503			}
11504		}
11505	);
11506} );
11507
11508
11509// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
11510jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
11511	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
11512	function( defaultExtra, funcName ) {
11513
11514		// margin is only for outerHeight, outerWidth
11515		jQuery.fn[ funcName ] = function( margin, value ) {
11516			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
11517				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
11518
11519			return access( this, function( elem, type, value ) {
11520				var doc;
11521
11522				if ( jQuery.isWindow( elem ) ) {
11523
11524					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
11525					// isn't a whole lot we can do. See pull request at this URL for discussion:
11526					// https://github.com/jquery/jquery/pull/764
11527					return elem.document.documentElement[ "client" + name ];
11528				}
11529
11530				// Get document width or height
11531				if ( elem.nodeType === 9 ) {
11532					doc = elem.documentElement;
11533
11534					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
11535					// whichever is greatest
11536					// unfortunately, this causes bug #3838 in IE6/8 only,
11537					// but there is currently no good, small way to fix it.
11538					return Math.max(
11539						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
11540						elem.body[ "offset" + name ], doc[ "offset" + name ],
11541						doc[ "client" + name ]
11542					);
11543				}
11544
11545				return value === undefined ?
11546
11547					// Get width or height on the element, requesting but not forcing parseFloat
11548					jQuery.css( elem, type, extra ) :
11549
11550					// Set width or height on the element
11551					jQuery.style( elem, type, value, extra );
11552			}, type, chainable ? margin : undefined, chainable, null );
11553		};
11554	} );
11555} );
11556
11557
11558jQuery.fn.extend( {
11559
11560	bind: function( types, data, fn ) {
11561		return this.on( types, null, data, fn );
11562	},
11563	unbind: function( types, fn ) {
11564		return this.off( types, null, fn );
11565	},
11566
11567	delegate: function( selector, types, data, fn ) {
11568		return this.on( types, selector, data, fn );
11569	},
11570	undelegate: function( selector, types, fn ) {
11571
11572		// ( namespace ) or ( selector, types [, fn] )
11573		return arguments.length === 1 ?
11574			this.off( selector, "**" ) :
11575			this.off( types, selector || "**", fn );
11576	}
11577} );
11578
11579// The number of elements contained in the matched element set
11580jQuery.fn.size = function() {
11581	return this.length;
11582};
11583
11584jQuery.fn.andSelf = jQuery.fn.addBack;
11585
11586
11587
11588
11589// Register as a named AMD module, since jQuery can be concatenated with other
11590// files that may use define, but not via a proper concatenation script that
11591// understands anonymous AMD modules. A named AMD is safest and most robust
11592// way to register. Lowercase jquery is used because AMD module names are
11593// derived from file names, and jQuery is normally delivered in a lowercase
11594// file name. Do this after creating the global so that if an AMD module wants
11595// to call noConflict to hide this version of jQuery, it will work.
11596
11597// Note that for maximum portability, libraries that are not jQuery should
11598// declare themselves as anonymous modules, and avoid setting a global if an
11599// AMD loader is present. jQuery is a special case. For more information, see
11600// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
11601
11602if ( typeof define === "function" && define.amd ) {
11603	define( "jquery", [], function() {
11604		return jQuery;
11605	} );
11606}
11607
11608
11609
11610var
11611
11612	// Map over jQuery in case of overwrite
11613	_jQuery = window.jQuery,
11614
11615	// Map over the $ in case of overwrite
11616	_$ = window.$;
11617
11618jQuery.noConflict = function( deep ) {
11619	if ( window.$ === jQuery ) {
11620		window.$ = _$;
11621	}
11622
11623	if ( deep && window.jQuery === jQuery ) {
11624		window.jQuery = _jQuery;
11625	}
11626
11627	return jQuery;
11628};
11629
11630// Expose jQuery and $ identifiers, even in
11631// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
11632// and CommonJS for browser emulators (#13566)
11633if ( !noGlobal ) {
11634	window.jQuery = window.$ = jQuery;
11635}
11636
11637return jQuery;
11638}));
11639(function(global, factory) {
11640  typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define([ "exports" ], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, 
11641  factory(global.ActiveStorage = {}));
11642})(this, (function(exports) {
11643  "use strict";
11644  var sparkMd5 = {
11645    exports: {}
11646  };
11647  (function(module, exports) {
11648    (function(factory) {
11649      {
11650        module.exports = factory();
11651      }
11652    })((function(undefined$1) {
11653      var hex_chr = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" ];
11654      function md5cycle(x, k) {
11655        var a = x[0], b = x[1], c = x[2], d = x[3];
11656        a += (b & c | ~b & d) + k[0] - 680876936 | 0;
11657        a = (a << 7 | a >>> 25) + b | 0;
11658        d += (a & b | ~a & c) + k[1] - 389564586 | 0;
11659        d = (d << 12 | d >>> 20) + a | 0;
11660        c += (d & a | ~d & b) + k[2] + 606105819 | 0;
11661        c = (c << 17 | c >>> 15) + d | 0;
11662        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;
11663        b = (b << 22 | b >>> 10) + c | 0;
11664        a += (b & c | ~b & d) + k[4] - 176418897 | 0;
11665        a = (a << 7 | a >>> 25) + b | 0;
11666        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;
11667        d = (d << 12 | d >>> 20) + a | 0;
11668        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;
11669        c = (c << 17 | c >>> 15) + d | 0;
11670        b += (c & d | ~c & a) + k[7] - 45705983 | 0;
11671        b = (b << 22 | b >>> 10) + c | 0;
11672        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;
11673        a = (a << 7 | a >>> 25) + b | 0;
11674        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;
11675        d = (d << 12 | d >>> 20) + a | 0;
11676        c += (d & a | ~d & b) + k[10] - 42063 | 0;
11677        c = (c << 17 | c >>> 15) + d | 0;
11678        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;
11679        b = (b << 22 | b >>> 10) + c | 0;
11680        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;
11681        a = (a << 7 | a >>> 25) + b | 0;
11682        d += (a & b | ~a & c) + k[13] - 40341101 | 0;
11683        d = (d << 12 | d >>> 20) + a | 0;
11684        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;
11685        c = (c << 17 | c >>> 15) + d | 0;
11686        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;
11687        b = (b << 22 | b >>> 10) + c | 0;
11688        a += (b & d | c & ~d) + k[1] - 165796510 | 0;
11689        a = (a << 5 | a >>> 27) + b | 0;
11690        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;
11691        d = (d << 9 | d >>> 23) + a | 0;
11692        c += (d & b | a & ~b) + k[11] + 643717713 | 0;
11693        c = (c << 14 | c >>> 18) + d | 0;
11694        b += (c & a | d & ~a) + k[0] - 373897302 | 0;
11695        b = (b << 20 | b >>> 12) + c | 0;
11696        a += (b & d | c & ~d) + k[5] - 701558691 | 0;
11697        a = (a << 5 | a >>> 27) + b | 0;
11698        d += (a & c | b & ~c) + k[10] + 38016083 | 0;
11699        d = (d << 9 | d >>> 23) + a | 0;
11700        c += (d & b | a & ~b) + k[15] - 660478335 | 0;
11701        c = (c << 14 | c >>> 18) + d | 0;
11702        b += (c & a | d & ~a) + k[4] - 405537848 | 0;
11703        b = (b << 20 | b >>> 12) + c | 0;
11704        a += (b & d | c & ~d) + k[9] + 568446438 | 0;
11705        a = (a << 5 | a >>> 27) + b | 0;
11706        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;
11707        d = (d << 9 | d >>> 23) + a | 0;
11708        c += (d & b | a & ~b) + k[3] - 187363961 | 0;
11709        c = (c << 14 | c >>> 18) + d | 0;
11710        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;
11711        b = (b << 20 | b >>> 12) + c | 0;
11712        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;
11713        a = (a << 5 | a >>> 27) + b | 0;
11714        d += (a & c | b & ~c) + k[2] - 51403784 | 0;
11715        d = (d << 9 | d >>> 23) + a | 0;
11716        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;
11717        c = (c << 14 | c >>> 18) + d | 0;
11718        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;
11719        b = (b << 20 | b >>> 12) + c | 0;
11720        a += (b ^ c ^ d) + k[5] - 378558 | 0;
11721        a = (a << 4 | a >>> 28) + b | 0;
11722        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;
11723        d = (d << 11 | d >>> 21) + a | 0;
11724        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;
11725        c = (c << 16 | c >>> 16) + d | 0;
11726        b += (c ^ d ^ a) + k[14] - 35309556 | 0;
11727        b = (b << 23 | b >>> 9) + c | 0;
11728        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;
11729        a = (a << 4 | a >>> 28) + b | 0;
11730        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;
11731        d = (d << 11 | d >>> 21) + a | 0;
11732        c += (d ^ a ^ b) + k[7] - 155497632 | 0;
11733        c = (c << 16 | c >>> 16) + d | 0;
11734        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;
11735        b = (b << 23 | b >>> 9) + c | 0;
11736        a += (b ^ c ^ d) + k[13] + 681279174 | 0;
11737        a = (a << 4 | a >>> 28) + b | 0;
11738        d += (a ^ b ^ c) + k[0] - 358537222 | 0;
11739        d = (d << 11 | d >>> 21) + a | 0;
11740        c += (d ^ a ^ b) + k[3] - 722521979 | 0;
11741        c = (c << 16 | c >>> 16) + d | 0;
11742        b += (c ^ d ^ a) + k[6] + 76029189 | 0;
11743        b = (b << 23 | b >>> 9) + c | 0;
11744        a += (b ^ c ^ d) + k[9] - 640364487 | 0;
11745        a = (a << 4 | a >>> 28) + b | 0;
11746        d += (a ^ b ^ c) + k[12] - 421815835 | 0;
11747        d = (d << 11 | d >>> 21) + a | 0;
11748        c += (d ^ a ^ b) + k[15] + 530742520 | 0;
11749        c = (c << 16 | c >>> 16) + d | 0;
11750        b += (c ^ d ^ a) + k[2] - 995338651 | 0;
11751        b = (b << 23 | b >>> 9) + c | 0;
11752        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;
11753        a = (a << 6 | a >>> 26) + b | 0;
11754        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;
11755        d = (d << 10 | d >>> 22) + a | 0;
11756        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;
11757        c = (c << 15 | c >>> 17) + d | 0;
11758        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;
11759        b = (b << 21 | b >>> 11) + c | 0;
11760        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;
11761        a = (a << 6 | a >>> 26) + b | 0;
11762        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;
11763        d = (d << 10 | d >>> 22) + a | 0;
11764        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;
11765        c = (c << 15 | c >>> 17) + d | 0;
11766        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;
11767        b = (b << 21 | b >>> 11) + c | 0;
11768        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;
11769        a = (a << 6 | a >>> 26) + b | 0;
11770        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;
11771        d = (d << 10 | d >>> 22) + a | 0;
11772        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;
11773        c = (c << 15 | c >>> 17) + d | 0;
11774        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;
11775        b = (b << 21 | b >>> 11) + c | 0;
11776        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;
11777        a = (a << 6 | a >>> 26) + b | 0;
vendor: 10,289 bytes, lines 11778-12063
11778        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;
11779        d = (d << 10 | d >>> 22) + a | 0;
11780        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;
11781        c = (c << 15 | c >>> 17) + d | 0;
11782        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;
11783        b = (b << 21 | b >>> 11) + c | 0;
11784        x[0] = a + x[0] | 0;
11785        x[1] = b + x[1] | 0;
11786        x[2] = c + x[2] | 0;
11787        x[3] = d + x[3] | 0;
11788      }
11789      function md5blk(s) {
11790        var md5blks = [], i;
11791        for (i = 0; i < 64; i += 4) {
11792          md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
11793        }
11794        return md5blks;
11795      }
11796      function md5blk_array(a) {
11797        var md5blks = [], i;
11798        for (i = 0; i < 64; i += 4) {
11799          md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);
11800        }
11801        return md5blks;
11802      }
11803      function md51(s) {
11804        var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;
11805        for (i = 64; i <= n; i += 64) {
11806          md5cycle(state, md5blk(s.substring(i - 64, i)));
11807        }
11808        s = s.substring(i - 64);
11809        length = s.length;
11810        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
11811        for (i = 0; i < length; i += 1) {
11812          tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);
11813        }
11814        tail[i >> 2] |= 128 << (i % 4 << 3);
11815        if (i > 55) {
11816          md5cycle(state, tail);
11817          for (i = 0; i < 16; i += 1) {
11818            tail[i] = 0;
11819          }
11820        }
11821        tmp = n * 8;
11822        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
11823        lo = parseInt(tmp[2], 16);
11824        hi = parseInt(tmp[1], 16) || 0;
11825        tail[14] = lo;
11826        tail[15] = hi;
11827        md5cycle(state, tail);
11828        return state;
11829      }
11830      function md51_array(a) {
11831        var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;
11832        for (i = 64; i <= n; i += 64) {
11833          md5cycle(state, md5blk_array(a.subarray(i - 64, i)));
11834        }
11835        a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);
11836        length = a.length;
11837        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
11838        for (i = 0; i < length; i += 1) {
11839          tail[i >> 2] |= a[i] << (i % 4 << 3);
11840        }
11841        tail[i >> 2] |= 128 << (i % 4 << 3);
11842        if (i > 55) {
11843          md5cycle(state, tail);
11844          for (i = 0; i < 16; i += 1) {
11845            tail[i] = 0;
11846          }
11847        }
11848        tmp = n * 8;
11849        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
11850        lo = parseInt(tmp[2], 16);
11851        hi = parseInt(tmp[1], 16) || 0;
11852        tail[14] = lo;
11853        tail[15] = hi;
11854        md5cycle(state, tail);
11855        return state;
11856      }
11857      function rhex(n) {
11858        var s = "", j;
11859        for (j = 0; j < 4; j += 1) {
11860          s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];
11861        }
11862        return s;
11863      }
11864      function hex(x) {
11865        var i;
11866        for (i = 0; i < x.length; i += 1) {
11867          x[i] = rhex(x[i]);
11868        }
11869        return x.join("");
11870      }
11871      if (hex(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592") ;
11872      if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) {
11873        (function() {
11874          function clamp(val, length) {
11875            val = val | 0 || 0;
11876            if (val < 0) {
11877              return Math.max(val + length, 0);
11878            }
11879            return Math.min(val, length);
11880          }
11881          ArrayBuffer.prototype.slice = function(from, to) {
11882            var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;
11883            if (to !== undefined$1) {
11884              end = clamp(to, length);
11885            }
11886            if (begin > end) {
11887              return new ArrayBuffer(0);
11888            }
11889            num = end - begin;
11890            target = new ArrayBuffer(num);
11891            targetArray = new Uint8Array(target);
11892            sourceArray = new Uint8Array(this, begin, num);
11893            targetArray.set(sourceArray);
11894            return target;
11895          };
11896        })();
11897      }
11898      function toUtf8(str) {
11899        if (/[\u0080-\uFFFF]/.test(str)) {
11900          str = unescape(encodeURIComponent(str));
11901        }
11902        return str;
11903      }
11904      function utf8Str2ArrayBuffer(str, returnUInt8Array) {
11905        var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;
11906        for (i = 0; i < length; i += 1) {
11907          arr[i] = str.charCodeAt(i);
11908        }
11909        return returnUInt8Array ? arr : buff;
11910      }
11911      function arrayBuffer2Utf8Str(buff) {
11912        return String.fromCharCode.apply(null, new Uint8Array(buff));
11913      }
11914      function concatenateArrayBuffers(first, second, returnUInt8Array) {
11915        var result = new Uint8Array(first.byteLength + second.byteLength);
11916        result.set(new Uint8Array(first));
11917        result.set(new Uint8Array(second), first.byteLength);
11918        return returnUInt8Array ? result : result.buffer;
11919      }
11920      function hexToBinaryString(hex) {
11921        var bytes = [], length = hex.length, x;
11922        for (x = 0; x < length - 1; x += 2) {
11923          bytes.push(parseInt(hex.substr(x, 2), 16));
11924        }
11925        return String.fromCharCode.apply(String, bytes);
11926      }
11927      function SparkMD5() {
11928        this.reset();
11929      }
11930      SparkMD5.prototype.append = function(str) {
11931        this.appendBinary(toUtf8(str));
11932        return this;
11933      };
11934      SparkMD5.prototype.appendBinary = function(contents) {
11935        this._buff += contents;
11936        this._length += contents.length;
11937        var length = this._buff.length, i;
11938        for (i = 64; i <= length; i += 64) {
11939          md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));
11940        }
11941        this._buff = this._buff.substring(i - 64);
11942        return this;
11943      };
11944      SparkMD5.prototype.end = function(raw) {
11945        var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;
11946        for (i = 0; i < length; i += 1) {
11947          tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);
11948        }
11949        this._finish(tail, length);
11950        ret = hex(this._hash);
11951        if (raw) {
11952          ret = hexToBinaryString(ret);
11953        }
11954        this.reset();
11955        return ret;
11956      };
11957      SparkMD5.prototype.reset = function() {
11958        this._buff = "";
11959        this._length = 0;
11960        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];
11961        return this;
11962      };
11963      SparkMD5.prototype.getState = function() {
11964        return {
11965          buff: this._buff,
11966          length: this._length,
11967          hash: this._hash.slice()
11968        };
11969      };
11970      SparkMD5.prototype.setState = function(state) {
11971        this._buff = state.buff;
11972        this._length = state.length;
11973        this._hash = state.hash;
11974        return this;
11975      };
11976      SparkMD5.prototype.destroy = function() {
11977        delete this._hash;
11978        delete this._buff;
11979        delete this._length;
11980      };
11981      SparkMD5.prototype._finish = function(tail, length) {
11982        var i = length, tmp, lo, hi;
11983        tail[i >> 2] |= 128 << (i % 4 << 3);
11984        if (i > 55) {
11985          md5cycle(this._hash, tail);
11986          for (i = 0; i < 16; i += 1) {
11987            tail[i] = 0;
11988          }
11989        }
11990        tmp = this._length * 8;
11991        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
11992        lo = parseInt(tmp[2], 16);
11993        hi = parseInt(tmp[1], 16) || 0;
11994        tail[14] = lo;
11995        tail[15] = hi;
11996        md5cycle(this._hash, tail);
11997      };
11998      SparkMD5.hash = function(str, raw) {
11999        return SparkMD5.hashBinary(toUtf8(str), raw);
12000      };
12001      SparkMD5.hashBinary = function(content, raw) {
12002        var hash = md51(content), ret = hex(hash);
12003        return raw ? hexToBinaryString(ret) : ret;
12004      };
12005      SparkMD5.ArrayBuffer = function() {
12006        this.reset();
12007      };
12008      SparkMD5.ArrayBuffer.prototype.append = function(arr) {
12009        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;
12010        this._length += arr.byteLength;
12011        for (i = 64; i <= length; i += 64) {
12012          md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));
12013        }
12014        this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);
12015        return this;
12016      };
12017      SparkMD5.ArrayBuffer.prototype.end = function(raw) {
12018        var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;
12019        for (i = 0; i < length; i += 1) {
12020          tail[i >> 2] |= buff[i] << (i % 4 << 3);
12021        }
12022        this._finish(tail, length);
12023        ret = hex(this._hash);
12024        if (raw) {
12025          ret = hexToBinaryString(ret);
12026        }
12027        this.reset();
12028        return ret;
12029      };
12030      SparkMD5.ArrayBuffer.prototype.reset = function() {
12031        this._buff = new Uint8Array(0);
12032        this._length = 0;
12033        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];
12034        return this;
12035      };
12036      SparkMD5.ArrayBuffer.prototype.getState = function() {
12037        var state = SparkMD5.prototype.getState.call(this);
12038        state.buff = arrayBuffer2Utf8Str(state.buff);
12039        return state;
12040      };
12041      SparkMD5.ArrayBuffer.prototype.setState = function(state) {
12042        state.buff = utf8Str2ArrayBuffer(state.buff, true);
12043        return SparkMD5.prototype.setState.call(this, state);
12044      };
12045      SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;
12046      SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;
12047      SparkMD5.ArrayBuffer.hash = function(arr, raw) {
12048        var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);
12049        return raw ? hexToBinaryString(ret) : ret;
12050      };
12051      return SparkMD5;
12052    }));
12053  })(sparkMd5);
12054  var SparkMD5 = sparkMd5.exports;
12055  const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
12056  class FileChecksum {
12057    static create(file, callback) {
12058      const instance = new FileChecksum(file);
12059      instance.create(callback);
12060    }
12061    constructor(file) {
12062      this.file = file;
12063      this.chunkSize = 2097152;
12064      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);
12065      this.chunkIndex = 0;
12066    }
12067    create(callback) {
12068      this.callback = callback;
12069      this.md5Buffer = new SparkMD5.ArrayBuffer;
12070      this.fileReader = new FileReader;
12071      this.fileReader.addEventListener("load", (event => this.fileReaderDidLoad(event)));
12072      this.fileReader.addEventListener("error", (event => this.fileReaderDidError(event)));
12073      this.readNextChunk();
12074    }
12075    fileReaderDidLoad(event) {
12076      this.md5Buffer.append(event.target.result);
12077      if (!this.readNextChunk()) {
12078        const binaryDigest = this.md5Buffer.end(true);
12079        const base64digest = btoa(binaryDigest);
12080        this.callback(null, base64digest);
12081      }
12082    }
12083    fileReaderDidError(event) {
12084      this.callback(`Error reading ${this.file.name}`);
12085    }
12086    readNextChunk() {
12087      if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {
12088        const start = this.chunkIndex * this.chunkSize;
12089        const end = Math.min(start + this.chunkSize, this.file.size);
12090        const bytes = fileSlice.call(this.file, start, end);
12091        this.fileReader.readAsArrayBuffer(bytes);
12092        this.chunkIndex++;
12093        return true;
12094      } else {
12095        return false;
12096      }
12097    }
12098  }
12099  function getMetaValue(name) {
12100    const element = findElement(document.head, `meta[name="${name}"]`);
12101    if (element) {
12102      return element.getAttribute("content");
12103    }
12104  }
12105  function findElements(root, selector) {
12106    if (typeof root == "string") {
12107      selector = root;
12108      root = document;
12109    }
12110    const elements = root.querySelectorAll(selector);
12111    return toArray(elements);
12112  }
12113  function findElement(root, selector) {
12114    if (typeof root == "string") {
12115      selector = root;
12116      root = document;
12117    }
12118    return root.querySelector(selector);
12119  }
12120  function dispatchEvent(element, type, eventInit = {}) {
12121    const {disabled: disabled} = element;
12122    const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;
12123    const event = document.createEvent("Event");
12124    event.initEvent(type, bubbles || true, cancelable || true);
12125    event.detail = detail || {};
12126    try {
12127      element.disabled = false;
12128      element.dispatchEvent(event);
12129    } finally {
12130      element.disabled = disabled;
12131    }
12132    return event;
12133  }
12134  function toArray(value) {
12135    if (Array.isArray(value)) {
12136      return value;
12137    } else if (Array.from) {
12138      return Array.from(value);
12139    } else {
12140      return [].slice.call(value);
12141    }
12142  }
12143  class BlobRecord {
12144    constructor(file, checksum, url, customHeaders = {}) {
12145      this.file = file;
12146      this.attributes = {
12147        filename: file.name,
12148        content_type: file.type || "application/octet-stream",
12149        byte_size: file.size,
12150        checksum: checksum
12151      };
12152      this.xhr = new XMLHttpRequest;
12153      this.xhr.open("POST", url, true);
12154      this.xhr.responseType = "json";
12155      this.xhr.setRequestHeader("Content-Type", "application/json");
12156      this.xhr.setRequestHeader("Accept", "application/json");
12157      this.xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
12158      Object.keys(customHeaders).forEach((headerKey => {
12159        this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);
12160      }));
12161      const csrfToken = getMetaValue("csrf-token");
12162      if (csrfToken != undefined) {
12163        this.xhr.setRequestHeader("X-CSRF-Token", csrfToken);
12164      }
12165      this.xhr.addEventListener("load", (event => this.requestDidLoad(event)));
12166      this.xhr.addEventListener("error", (event => this.requestDidError(event)));
12167    }
12168    get status() {
12169      return this.xhr.status;
12170    }
12171    get response() {
12172      const {responseType: responseType, response: response} = this.xhr;
12173      if (responseType == "json") {
12174        return response;
12175      } else {
12176        return JSON.parse(response);
12177      }
12178    }
12179    create(callback) {
12180      this.callback = callback;
12181      this.xhr.send(JSON.stringify({
12182        blob: this.attributes
12183      }));
12184    }
12185    requestDidLoad(event) {
12186      if (this.status >= 200 && this.status < 300) {
12187        const {response: response} = this;
12188        const {direct_upload: direct_upload} = response;
12189        delete response.direct_upload;
12190        this.attributes = response;
12191        this.directUploadData = direct_upload;
12192        this.callback(null, this.toJSON());
12193      } else {
12194        this.requestDidError(event);
12195      }
12196    }
12197    requestDidError(event) {
12198      this.callback(`Error creating Blob for "${this.file.name}". Status: ${this.status}`);
12199    }
12200    toJSON() {
12201      const result = {};
12202      for (const key in this.attributes) {
12203        result[key] = this.attributes[key];
12204      }
12205      return result;
12206    }
12207  }
12208  class BlobUpload {
12209    constructor(blob) {
12210      this.blob = blob;
12211      this.file = blob.file;
12212      const {url: url, headers: headers} = blob.directUploadData;
12213      this.xhr = new XMLHttpRequest;
12214      this.xhr.open("PUT", url, true);
12215      this.xhr.responseType = "text";
12216      for (const key in headers) {
12217        this.xhr.setRequestHeader(key, headers[key]);
12218      }
12219      this.xhr.addEventListener("load", (event => this.requestDidLoad(event)));
12220      this.xhr.addEventListener("error", (event => this.requestDidError(event)));
12221    }
12222    create(callback) {
12223      this.callback = callback;
12224      this.xhr.send(this.file.slice());
12225    }
12226    requestDidLoad(event) {
12227      const {status: status, response: response} = this.xhr;
12228      if (status >= 200 && status < 300) {
12229        this.callback(null, response);
12230      } else {
12231        this.requestDidError(event);
12232      }
12233    }
12234    requestDidError(event) {
12235      this.callback(`Error storing "${this.file.name}". Status: ${this.xhr.status}`);
12236    }
12237  }
12238  let id = 0;
12239  class DirectUpload {
12240    constructor(file, url, delegate, customHeaders = {}) {
12241      this.id = ++id;
12242      this.file = file;
12243      this.url = url;
12244      this.delegate = delegate;
12245      this.customHeaders = customHeaders;
12246    }
12247    create(callback) {
12248      FileChecksum.create(this.file, ((error, checksum) => {
12249        if (error) {
12250          callback(error);
12251          return;
12252        }
12253        const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);
12254        notify(this.delegate, "directUploadWillCreateBlobWithXHR", blob.xhr);
12255        blob.create((error => {
12256          if (error) {
12257            callback(error);
12258          } else {
12259            const upload = new BlobUpload(blob);
12260            notify(this.delegate, "directUploadWillStoreFileWithXHR", upload.xhr);
12261            upload.create((error => {
12262              if (error) {
12263                callback(error);
12264              } else {
12265                callback(null, blob.toJSON());
12266              }
12267            }));
12268          }
12269        }));
12270      }));
12271    }
12272  }
12273  function notify(object, methodName, ...messages) {
12274    if (object && typeof object[methodName] == "function") {
12275      return object[methodName](...messages);
12276    }
12277  }
12278  class DirectUploadController {
12279    constructor(input, file) {
12280      this.input = input;
12281      this.file = file;
12282      this.directUpload = new DirectUpload(this.file, this.url, this);
12283      this.dispatch("initialize");
12284    }
12285    start(callback) {
12286      const hiddenInput = document.createElement("input");
12287      hiddenInput.type = "hidden";
12288      hiddenInput.name = this.input.name;
12289      this.input.insertAdjacentElement("beforebegin", hiddenInput);
12290      this.dispatch("start");
12291      this.directUpload.create(((error, attributes) => {
12292        if (error) {
12293          hiddenInput.parentNode.removeChild(hiddenInput);
12294          this.dispatchError(error);
12295        } else {
12296          hiddenInput.value = attributes.signed_id;
12297        }
12298        this.dispatch("end");
12299        callback(error);
12300      }));
12301    }
12302    uploadRequestDidProgress(event) {
12303      const progress = event.loaded / event.total * 100;
12304      if (progress) {
12305        this.dispatch("progress", {
12306          progress: progress
12307        });
12308      }
12309    }
12310    get url() {
12311      return this.input.getAttribute("data-direct-upload-url");
12312    }
12313    dispatch(name, detail = {}) {
12314      detail.file = this.file;
12315      detail.id = this.directUpload.id;
12316      return dispatchEvent(this.input, `direct-upload:${name}`, {
12317        detail: detail
12318      });
12319    }
12320    dispatchError(error) {
12321      const event = this.dispatch("error", {
12322        error: error
12323      });
12324      if (!event.defaultPrevented) {
12325        alert(error);
12326      }
12327    }
12328    directUploadWillCreateBlobWithXHR(xhr) {
12329      this.dispatch("before-blob-request", {
12330        xhr: xhr
12331      });
12332    }
12333    directUploadWillStoreFileWithXHR(xhr) {
12334      this.dispatch("before-storage-request", {
12335        xhr: xhr
12336      });
12337      xhr.upload.addEventListener("progress", (event => this.uploadRequestDidProgress(event)));
12338    }
12339  }
12340  const inputSelector = "input[type=file][data-direct-upload-url]:not([disabled])";
12341  class DirectUploadsController {
12342    constructor(form) {
12343      this.form = form;
12344      this.inputs = findElements(form, inputSelector).filter((input => input.files.length));
12345    }
12346    start(callback) {
12347      const controllers = this.createDirectUploadControllers();
12348      const startNextController = () => {
12349        const controller = controllers.shift();
12350        if (controller) {
12351          controller.start((error => {
12352            if (error) {
12353              callback(error);
12354              this.dispatch("end");
12355            } else {
12356              startNextController();
12357            }
12358          }));
12359        } else {
12360          callback();
12361          this.dispatch("end");
12362        }
12363      };
12364      this.dispatch("start");
12365      startNextController();
12366    }
12367    createDirectUploadControllers() {
12368      const controllers = [];
12369      this.inputs.forEach((input => {
12370        toArray(input.files).forEach((file => {
12371          const controller = new DirectUploadController(input, file);
12372          controllers.push(controller);
12373        }));
12374      }));
12375      return controllers;
12376    }
12377    dispatch(name, detail = {}) {
12378      return dispatchEvent(this.form, `direct-uploads:${name}`, {
12379        detail: detail
12380      });
12381    }
12382  }
12383  const processingAttribute = "data-direct-uploads-processing";
12384  const submitButtonsByForm = new WeakMap;
12385  let started = false;
12386  function start() {
12387    if (!started) {
12388      started = true;
12389      document.addEventListener("click", didClick, true);
12390      document.addEventListener("submit", didSubmitForm, true);
12391      document.addEventListener("ajax:before", didSubmitRemoteElement);
12392    }
12393  }
12394  function didClick(event) {
12395    const button = event.target.closest("button, input");
12396    if (button && button.type === "submit" && button.form) {
12397      submitButtonsByForm.set(button.form, button);
12398    }
12399  }
12400  function didSubmitForm(event) {
12401    handleFormSubmissionEvent(event);
12402  }
12403  function didSubmitRemoteElement(event) {
12404    if (event.target.tagName == "FORM") {
12405      handleFormSubmissionEvent(event);
12406    }
12407  }
12408  function handleFormSubmissionEvent(event) {
12409    const form = event.target;
12410    if (form.hasAttribute(processingAttribute)) {
12411      event.preventDefault();
12412      return;
12413    }
12414    const controller = new DirectUploadsController(form);
12415    const {inputs: inputs} = controller;
12416    if (inputs.length) {
12417      event.preventDefault();
12418      form.setAttribute(processingAttribute, "");
12419      inputs.forEach(disable);
12420      controller.start((error => {
12421        form.removeAttribute(processingAttribute);
12422        if (error) {
12423          inputs.forEach(enable);
12424        } else {
12425          submitForm(form);
12426        }
12427      }));
12428    }
12429  }
12430  function submitForm(form) {
12431    let button = submitButtonsByForm.get(form) || findElement(form, "input[type=submit], button[type=submit]");
12432    if (button) {
12433      const {disabled: disabled} = button;
12434      button.disabled = false;
12435      button.focus();
12436      button.click();
12437      button.disabled = disabled;
12438    } else {
12439      button = document.createElement("input");
12440      button.type = "submit";
12441      button.style.display = "none";
12442      form.appendChild(button);
12443      button.click();
12444      form.removeChild(button);
12445    }
12446    submitButtonsByForm.delete(form);
12447  }
12448  function disable(input) {
12449    input.disabled = true;
12450  }
12451  function enable(input) {
12452    input.disabled = false;
12453  }
12454  function autostart() {
12455    if (window.ActiveStorage) {
12456      start();
12457    }
12458  }
12459  setTimeout(autostart, 1);
12460  exports.DirectUpload = DirectUpload;
12461  exports.DirectUploadController = DirectUploadController;
12462  exports.DirectUploadsController = DirectUploadsController;
12463  exports.start = start;
12464  Object.defineProperty(exports, "__esModule", {
12465    value: true
12466  });
12467}));
12468/*! algoliasearch 3.35.1 | © 2014, 2015 Algolia SAS | github.com/algolia/algoliasearch-client-js */
12469!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.algoliasearch=e()}}(function(){var e;return function t(e,r,o){function n(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(t){var r=e[a][1][t];return n(r?r:t)},l,l.exports,t,e,r,o)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a<o.length;a++)n(o[a]);return n}({1:[function(e,t,r){(function(o){function n(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+r.humanize(this.diff),t){var o="color: "+this.color;e.splice(1,0,o,"color: inherit");var n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(n++,"%c"===e&&(i=n))}),e.splice(i,0,o)}}function a(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}
12469function s(e){try{null==e?r.storage.removeItem("debug"):r.storage.debug=e}catch(t){}}function u(){var e;try{e=r.storage.debug}catch(t){}return!e&&"undefined"!=typeof o&&"env"in o&&(e=o.env.DEBUG),e}function c(){try{return window.localStorage}catch(e){}}r=t.exports=e(2),r.log=a,r.formatArgs=i,r.save=s,r.load=u,r.useColors=n,r.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:c(),r.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],r.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},r.enable(u())}).call(this,e(11))},{11:11,2:2}],2:[function(e,t,r){function o(e){var t,o=0;for(t in e)o=(o<<5)-o+e.charCodeAt(t),o|=0;return r.colors[Math.abs(o)%r.colors.length]}function n(e){function t(){if(t.enabled){var e=t,o=+new Date,n=o-(c||o);e.diff=n,e.prev=c,e.curr=o,c=o;for(var i=new Array(arguments.length),a=0;a<i.length;a++)i[a]=arguments[a];i[0]=r.coerce(i[0]),"string"!=typeof i[0]&&i.unshift("%O");var s=0;i[0]=i[0].replace(/%([a-zA-Z%])/g,function(t,o){if("%%"===t)return t;s++;var n=r.formatters[o];if("function"==typeof n){var a=i[s];t=n.call(e,a),i.splice(s,1),s--}return t}),r.formatArgs.call(e,i);var u=t.log||r.log||console.log.bind(console);u.apply(e,i)}}return t.namespace=e,t.enabled=r.enabled(e),t.useColors=r.useColors(),t.color=o(e),"function"==typeof r.init&&r.init(t),t}function i(e){r.save(e),r.names=[],r.skips=[];for(var t=("string"==typeof e?e:"").split(/[\s,]+/),o=t.length,n=0;n<o;n++)t[n]&&(e=t[n].replace(/\*/g,".*?"),"-"===e[0]?r.skips.push(new RegExp("^"+e.substr(1)+"$")):r.names.push(new RegExp("^"+e+"$")))}function a(){r.enable("")}function s(e){var t,o;for(t=0,o=r.skips.length;t<o;t++)if(r.skips[t].test(e))return!1;for(t=0,o=r.names.length;t<o;t++)if(r.names[t].test(e))return!0;return!1}function u(e){return e instanceof Error?e.stack||e.message:e}r=t.exports=n.debug=n["default"]=n,r.coerce=u,r.disable=a,r.enable=i,r.enabled=s,r.humanize=e(8),r.names=[],r.skips=[],r.formatters={};var c},{8:8}],3:[function(t,r,o){(function(n,i){!function(t,n){"object"==typeof o&&"undefined"!=typeof r?r.exports=n():"function"==typeof e&&e.amd?e(n):t.ES6Promise=n()}(this,function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function r(e){return"function"==typeof e}function o(e){Q=e}function a(e){Y=e}function s(){return function(){return n.nextTick(f)}}function u(){return"undefined"!=typeof G?function(){G(f)}:p()}function c(){var e=0,t=new Z(f),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=f,function(){return e.port2.postMessage(0)}}function p(){var e=setTimeout;return function(){return e(f,1)}}function f(){for(var e=0;e<V;e+=2){var t=re[e],r=re[e+1];t(r),re[e]=void 0,re[e+1]=void 0}V=0}function d(){try{var e=t,r=e("vertx");return G=r.runOnLoop||r.runOnContext,u()}catch(o){return p()}}function h(e,t){var r=arguments,o=this,n=new this.constructor(m);void 0===n[ne]&&U(n);var i=o._state;return i?!function(){var e=r[i-1];Y(function(){return q(i,n,e,o._result)})}():k(o,n,e,t),n}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var r=new t(m);return S(r,e),r}function m(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function v(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function w(e,t,r,o){try{e.call(t,r,o)}catch(n){return n}}function _(e,t,r){Y(function(e){var o=!1,n=w(r,t,function(r){o||(o=!0,t!==r?S(e,r):j(e,r))},function(t){o||(o=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!o&&n&&(o=!0,O(e,n))},e)}function x(e,t){t._state===ae?j(e,t._result):t._state===se?O(e,t._result):k(t,void 0,function(t){return S(e,t)},function(t){return O(e,t)})}function T(e,t,o){t.constructor===e.constructor&&o===h&&t.constructor.resolve===y?x(e,t):o===ue?(O(e,ue.error),ue.error=null):void 0===o?j(e,t):r(o)?_(e,t,o):j(e,t)}
vendor: 2,008 bytes, line 12469
12469function S(t,r){t===r?O(t,g()):e(r)?T(t,r,b(r)):j(t,r)}function A(e){e._onerror&&e._onerror(e._result),R(e)}function j(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&Y(R,e))}function O(e,t){e._state===ie&&(e._state=se,e._result=t,Y(A,e))}function k(e,t,r,o){var n=e._subscribers,i=n.length;e._onerror=null,n[i]=t,n[i+ae]=r,n[i+se]=o,0===i&&e._state&&Y(R,e)}function R(e){var t=e._subscribers,r=e._state;if(0!==t.length){for(var o=void 0,n=void 0,i=e._result,a=0;a<t.length;a+=3)o=t[a],n=t[a+r],o?q(r,o,n,i):n(i);e._subscribers.length=0}}function C(){this.error=null}function I(e,t){try{return e(t)}catch(r){return ce.error=r,ce}}function q(e,t,o,n){var i=r(o),a=void 0,s=void 0,u=void 0,c=void 0;if(i){if(a=I(o,n),a===ce?(c=!0,s=a.error,a.error=null):u=!0,t===a)return void O(t,v())}else a=n,u=!0;t._state!==ie||(i&&u?S(t,a):c?O(t,s):e===ae?j(t,a):e===se&&O(t,a))}function N(e,t){try{t(function(t){S(e,t)},function(t){O(e,t)})}catch(r){O(e,r)}}function E(){return le++}function U(e){e[ne]=le++,e._state=void 0,e._result=void 0,e._subscribers=[]}function P(e,t){this._instanceConstructor=e,this.promise=new e(m),this.promise[ne]||U(this.promise),X(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?j(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&j(this.promise,this._result))):O(this.promise,D())}function D(){return new Error("Array Methods must be provided an Array")}function H(e){return new P(this,e).promise}function F(e){var t=this;return new t(X(e)?function(r,o){for(var n=e.length,i=0;i<n;i++)t.resolve(e[i]).then(r,o)}:function(e,t){return t(new TypeError("You must pass an array to race."))})}function J(e){var t=this,r=new t(m);return O(r,e),r}function M(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function $(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object c
12469onstructor cannot be called as a function.")}function L(e){this[ne]=E(),this._result=this._state=void 0,this._subscribers=[],m!==e&&("function"!=typeof e&&M(),this instanceof L?N(this,e):$())}function B(){var e=void 0;if("undefined"!=typeof i)e=i;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var r=e.Promise;if(r){var o=null;try{o=Object.prototype.toString.call(r.resolve())}catch(t){}if("[object Promise]"===o&&!r.cast)return}e.Promise=L}var K=void 0;K=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var X=K,V=0,G=void 0,Q=void 0,Y=function(e,t){re[V]=e,re[V+1]=t,V+=2,2===V&&(Q?Q(f):oe())},z="undefined"!=typeof window?window:void 0,W=z||{},Z=W.MutationObserver||W.WebKitMutationObserver,ee="undefined"==typeof self&&"undefined"!=typeof n&&"[object process]"==={}.toString.call(n),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,re=new Array(1e3),oe=void 0;oe=ee?s():Z?c():te?l():void 0===z&&"function"==typeof t?d():p();var ne=Math.random().toString(36).substring(16),ie=void 0,ae=1,se=2,ue=new C,ce=new C,le=0;return P.prototype._enumerate=function(e){for(var t=0;this._state===ie&&t<e.length;t++)this._eachEntry(e[t],t)},P.prototype._eachEntry=function(e,t){var r=this._instanceConstructor,o=r.resolve;if(o===y){var n=b(e);if(n===h&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof n)this._remaining--,this._result[t]=e;else if(r===L){var i=new r(m);T(i,e,n),this._willSettleAt(i,t)}else this._willSettleAt(new r(function(t){return t(e)}),t)}else this._willSettleAt(o(e),t)},P.prototype._settledAt=function(e,t,r){var o=this.promise;o._state===ie&&(this._remaining--,e===se?O(o,r):this._result[t]=r),0===this._remaining&&j(o,this._result)},P.prototype._willSettleAt=function(e,t){var r=this;k(e,void 0,function(e){return r._settledAt(ae,t,e)},function(e){return r._settledAt(se,t,e)})},L.all=H,L.race=F,L.resolve=y,L.reject=J,L._setScheduler=o,L._setAsap=a,L._asap=Y,L.prototype={constructor:L,then:h,"catch":function(e){return this.then(null,e)}},L.polyfill=B,L.Promise=L,L})}).call(this,t(11),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{11:11}],4:[function(e,t,r){var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString;t.exports=function(e,t,r){if("[object Function]"!==n.call(t))throw new TypeError("iterator must be a function");var i=e.length;if(i===+i)for(var a=0;a<i;a++)t.call(r,e[a],a,e);else for(var s in e)o.call(e,s)&&t.call(r,e[s],s,e)}},{}],5:[function(e,t,r){(function(e){var r;r="undefined"!=typeof window?window:"undefined"!=typeof e?e:"undefined"!=typeof self?self:{},t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],6:[function(e,t,r){"function"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],7:[function(e,t,r){var o={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==o.call(e)}},{}],8:[function(e,t,r){function o(e){if(e=String(e),!(e.length>100)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),o=(t[2]||"ms").toLowerCase();switch(o){case"years":case"year":case"yrs":case"yr":case"y":return r*p;case"days":case"day":case"d":return r*l;case"hours":case"hour":case"hrs":case"hr":case"h":return r*c;case"minutes":case"minute":case"mins":case"min":case"m":return r*u;case"seconds":case"second":case"secs":case"sec":case"s":return r*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function n(e){return e>=l?Math.round(e/l)+"d":e>=c?Math.round(e/c)+"h":e>=u?Math.round(e/u)+"m":e>=s?Math.round(e/s)+"s":e+"ms"}function i(e){return a(e,l,"day")||a(e,c,"hour")||a(e,u,"minute")||a(e,s,"second")||e+" ms"}function a(e,t,r){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+r:Math.ceil(e/t)+" "+r+"s"}
12469var s=1e3,u=60*s,c=60*u,l=24*c,p=365.25*l;t.exports=function(e,t){t=t||{};var r=typeof e;if("string"===r&&e.length>0)return o(e);if("number"===r&&isNaN(e)===!1)return t["long"]?i(e):n(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],9:[function(e,t,r){"use strict";var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString,i=Array.prototype.slice,a=e(10),s=Object.prototype.propertyIsEnumerable,u=!s.call({toString:null},"toString"),c=s.call(function(){},"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(e){var t=e.constructor;return t&&t.prototype===e},f={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!f["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{p(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),h=function(e){if("undefined"==typeof window||!d)return p(e);try{return p(e)}catch(t){return!1}},y=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===n.call(e),i=a(e),s=t&&"[object String]"===n.call(e),p=[];if(!t&&!r&&!i)throw new TypeError("Object.keys called on a non-object");var f=c&&r;if(s&&e.length>0&&!o.call(e,0))for(var d=0;d<e.length;++d)p.push(String(d));if(i&&e.length>0)for(var y=0;y<e.length;++y)p.push(String(y));else for(var m in e)f&&"prototype"===m||!o.call(e,m)||p.push(String(m));if(u)for(var g=h(e),v=0;v<l.length;++v)g&&"constructor"===l[v]||!o.call(e,l[v])||p.push(l[v]);return p};y.shim=function(){if(Object.keys){var e=function(){return 2===(Object.keys(arguments)||"").length}(1,2);if(!e){var t=Object.keys;Object.keys=function(e){return t(a(e)?i.call(e):e)}}}else Object.keys=y;return Object.keys||y},t.exports=y},{10:10}],10:[function(e,t,r){"use strict";var o=Object.prototype.toString;t.exports=function(e){var t=o.call(e),r="[object Arguments]"===t;return r||(r="[object Array]"!==t&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===o.call(e.callee)),r}},{}],11:[function(e,t,r){function o(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(e){if(p===setTimeout)return setTimeout(e,0);if((p===o||!p)&&setTimeout)return p=setTimeout,setTimeout(e,0);try{return p(e,0)}catch(t){try{return p.call(null,e,0)}catch(t){return p.call(this,e,0)}}}function a(e){if(f===clearTimeout)return clearTimeout(e);if((f===n||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function s(){m&&h&&(m=!1,h.length?y=h.concat(y):g=-1,y.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=y.length;t;){for(h=y,y=[];++g<t;)h&&h[g].run();g=-1,t=y.length}h=null,m=!1,a(e)}}function c(e,t){this.fun=e,this.array=t}function l(){}var p,f,d=t.exports={};!function(){try{p="function"==typeof setTimeout?setTimeout:o}catch(e){p=o}try{f="function"==typeof clearTimeout?clearTimeout:n}catch(e){f=n}}();var h,y=[],m=!1,g=-1;d.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];y.push(new c(e,t)),1!==y.length||m||i(u)},c.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=l,d.addListener=l,d.once=l,d.off=l,d.removeListener=l,d.removeAllListeners=l,d.emit=l,d.binding=function(e){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(e){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},{}],12:[function(e,t,r){"use strict";function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,r,i){t=t||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var s=/\+/g;e=e.split(t);var u=1e3;i&&"number"==typeof i.maxKeys&&(u=i.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var l=0;l<c;++l){var p,f,d,h,y=e[l].replace(s,"%20"),m=y.indexOf(r);m>=0?(p=y.substr(0,m),f=y.substr(m+1)):(p=y,f=""),d=decodeURIComponent(p),h=decodeURIComponent(f),o(a,d)?n(a[d])?a[d].push(h):a[d]=[a[d],h]:a[d]=h}return a};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],13:[function(e,t,r){"use strict";function o(e,t){if(e.map)return e.map(t);for(var r=[],o=0;o<e.length;o++)r.push(t(e[o],o));return r}var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};t.exports=function(e,t,r,s){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?o(a(e),function(a){var s=encodeURIComponent(n(a))+r;return i(e[a])?o(e[a],function(e){return s+encodeURIComponent(n(e))}).join(t):s+encodeURIComponent(n(e[a]))}).join(t):s?encodeURIComponent(n(s))+r+encodeURIComponent(n(e)):""};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},a=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t}},{}],14:[function(e,t,r){"use strict";r.decode=r.parse=e(12),r.encode=r.stringify=e(13)},{12:12,13:13}],15:[function(e,t,r){(function(r){function o(t,r,o){var i=e(1)("algoliasearch"),a=e(22),s=e(7),c=e(27),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(o._allowEmptyCredentials!==!0&&!t)throw new u.AlgoliaSearchError("Please provide an application ID. "+l);if(o._allowEmptyCredentials!==!0&&!r)throw new u.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=r,this.hosts={read:[],write:[]},o=o||{},this._timeouts=o.timeouts||{connect:1e3,read:2e3,write:3e4},o.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=o.timeout);var p=o.protocol||"https:";if(/:$/.test(p)||(p+=":"),"http:"!==p&&"https:"!==p)throw new u.AlgoliaSearchError("protocol must be `http:` or `https:` 
12469(was `"+o.protocol+"`)");if(this._checkAppIdData(),o.hosts)s(o.hosts)?(this.hosts.read=a(o.hosts),this.hosts.write=a(o.hosts)):(this.hosts.read=a(o.hosts.read),this.hosts.write=a(o.hosts.write));else{var f=c(this._shuffleResult,function(e){return t+"-"+e+".algolianet.com"}),d=(o.dsn===!1?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+d].concat(f),this.hosts.write=[this.applicationID+".algolia.net"].concat(f)}this.hosts.read=c(this.hosts.read,n(p)),this.hosts.write=c(this.hosts.write,n(p)),this.extraHeaders={},this.cache=o._cache||{},this._ua=o._ua,this._useCache=!(void 0!==o._useCache&&!o._cache)||o._useCache,this._useRequestCache=this._useCache&&o._useRequestCache,this._useFallback=void 0===o.useFallback||o.useFallback,this._setTimeout=o._setTimeout,i("init done, %j",this)}function n(e){return function(t){return e+"//"+t.toLowerCase()}}function i(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var r=JSON.stringify(e);return Array.prototype.toJSON=t,r}function a(e){for(var t,r,o=e.length;0!==o;)r=Math.floor(Math.random()*o),o-=1,t=e[o],e[o]=e[r],e[r]=t;return e}function s(e){var t={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var o;o="x-algolia-api-key"===r||"x-algolia-application-id"===r?"**hidden for security purposes**":e[r],t[r]=o}return t}t.exports=o;var u=e(25),c=e(26),l=e(16),p=e(31),f=500,d=r.env.RESET_APP_DATA_TIMER&&parseInt(r.env.RESET_APP_DATA_TIMER,10)||12e4;o.prototype.initIndex=function(e){return new l(this,e)},o.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},o.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},o.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},o.prototype.addAlgoliaAgent=function(e){var t="; "+e;this._ua.indexOf(t)===-1&&(this._ua+=t)},o.prototype._jsonRequest=function(t){function r(e,n){function c(e){var t=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;d("received response: statusCode: %s, computed statusCode: %d, headers: %j",e.statusCode,t,e.headers);var r=2===Math.floor(t/100),o=new Date;if(w.push({currentHost:A,headers:s(p),content:a||null,contentLength:void 0!==a?a.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:T,endTime:o,duration:o-T,statusCode:t}),r)return m._useCache&&!m._useRequestCache&&y&&(y[l]=e.responseText),{responseText:e.responseText,body:e.body};var i=4!==Math.floor(t/100);if(i)return g+=1,_();d("unrecoverable error");var c=new u.AlgoliaSearchError(e.body&&e.body.message,{debugData:w,statusCode:t});return m._promise.reject(c)}function f(e){d("error: %s, stack: %s",e.message,e.stack);var r=new Date;return w.push({currentHost:A,headers:s(p),content:a||null,contentLength:void 0!==a?a.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:T,endTime:r,duration:r-T}),e instanceof u.AlgoliaSearchError||(e=new u.Unknown(e&&e.message,e)),g+=1,e instanceof u.Unknown||e instanceof u.UnparsableJSON||g>=m.hosts[t.hostType].length&&(v||!b)?(e.debugData=w,m._promise.reject(e)):e instanceof u.RequestTimeout?x():_()}function _(){return d("retrying request"),m._incrementHostIndex(t.hostType),r(e,n)}function x(){return d("retrying request with higher timeout"),m._incrementHostIndex(t.hostType),m._incrementTimeoutMultipler(),n.timeouts=m._getTimeoutsForRequest(t.hostType),r(e,n)}m._checkAppIdData();var T=new Date;if(m._useCache&&!m._useRequestCache&&(l=t.url),m._useCache&&!m._useRequestCache&&a&&(l+="_body_"+n.body),o(!m._useRequestCache,y,l)){d("serving response from cache");var S=y[l];return m._promise.resolve({body:JSON.parse(S),responseText:S})}if(g>=m.hosts[t.hostType].length)return!b||v?(d("could not get any response"),m._promise.reject(new u.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to [email protected] to report and resolve the issue. Application id was: "+m.applicationID,{debugData:w}))):(d("switching to fallback"),g=0,n.method=t.fallback.method,n.url=t.fallback.url,n.jsonBody=t.fallback.body,n.jsonBody&&(n.body=i(n.jsonBody)),p=m._computeRequestHeaders({additionalUA:h,headers:t.headers}),n.timeouts=m._getTimeoutsForRequest(t.hostType),m._setHostIndexByType(0,t.hostType),v=!0,r(m._request.fallback,n));var A=m._getHostByType(t.hostType),j=A+n.url,O={body:n.body,jsonBody:n.jsonBody,method:n.method,headers:p,timeouts:n.timeouts,debug:d,forceAuthHeaders:n.forceAuthHeaders};return d("method: %s, url: %s, headers: %j, timeouts: %d",O.method,j,O.headers,O.timeouts),e===m._request.fallback&&d("using fallback"),e.call(m,j,O).then(c,f)}function o(e,t,r){return m._useCache&&e&&t&&void 0!==t[r]}function n(e,r){return o(m._useRequestCache,y,l)&&e["catch"](function(){delete y[l]}),"function"!=typeof t.callback?e.then(r):void e.then(function(e){c(function(){t.callback(null,r(e))},m._setTimeout||setTimeout)},function(e){c(function(){t.callback(e)},m._setTimeout||setTimeout)})}this._checkAppIdData();var a,l,p,d=e(1)("algoliasearch:"+t.url),h=t.additionalUA||"",y=t.cache,m=this,g=0,v=!1,b=m._useFallback&&m._request.fallback&&t.fallback;this.apiKey.length>f&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,p=this._computeRequestHeaders({additionalUA:h,withApiKey:!1,headers:t.headers})):p=this._computeRequestHeaders({additionalUA:h,headers:t.headers}),void 0!==t.body&&(a=i(t.body)),d("request start");var w=[];if(m._useCache&&m._useRequestCache&&(l=t.url),m._useCache&&m._useRequestCache&&a&&(l+="_body_"+a),o(m._useRequestCache,y,l)){d("serving request from cache");var _=y[l],x="function"!=typeof _.then?m._promise.resolve({responseText:_}):_;return n(x,function(e){return JSON.parse(e.responseText)})}var T=r(m._request,{url:t.url,method:t.method,body:a,jsonBody:t.body,timeouts:m._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return m._useCache&&m._useRequestCache&&y&&(y[l]=T),n(T,function(e){return e.body})},o.prototype._getSearchParams=function(e,t){if(void 0===e||null===e)return t;for(var r in e)null!==r&&void 0!==e[r]&&e.hasOwnProperty(r)&&(t+=""===t?"":"&",t+=r+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[r])?i(e[r]):e[r]));return t},o.prototype._computeRequestHeaders=function(t){var r=e(4),o=t.additionalUA?this._ua+"; "+t.additionalUA:this._ua,n={"x-algolia-agent":o,"x-algolia-application-id":this.applicationID};return t.withApiKey!==!1&&(n["x-algolia-api-key"]=this.apiKey),this.userToken&&(n["x-algolia-usertoken"]=this.userToken),this.securityTags&&(n["x-algolia-tagfilters"]=this.securityTags),r(this.extraHeaders,function(e,t){n[t]=e}),t.headers&&r(t.headers,function(e,t){n[t]=e}),n},o.prototype.search=function(t,r,o){var n=e(7),i=e(27),a="Usage: client.search(arrayOfQueries[, callback])";if(!n(t))throw new Error(a);"function"==typeof r?(o=r,r={}):void 0===r&&(r={});var s=this,u={requests:i(t,function(e){var t="";return void 0!==e.query&&(t+="query="+encodeURIComponent(e.query)),{indexName:e.indexName,params:s._getSearchParams(e.params,t)}})},c=i(u.requests,function(e,t){return t+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(e.indexName)+"?"+e.params)}).join("&"),l="/1/indexes/*/queries";return void 0!==r.strategy&&(u.strategy=r.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:l,body:u,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:c}},callback:o})},o.prototype.searchForFacetValues=function(t){var r=e(7),o=e(27),n="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!r(t))throw new Error(n);var i=this;return i._promise.all(o(t,function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(n);var r=e(22),o=e(29),a=t.indexName,s=t.params,u=s.facetName,c=o(r(s),function(e){return"facetName"===e}),l=i._getSearchParams(c,"");return i._jsonRequest({cache:i.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/facets/"+encodeURIComponent(u)+"/query",hostType:"read",body:{params:l}})}))},o.prototype.setSecurityTags=function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var t=[],r=0;r<e.length;++r)if("[object Array]"===Object.prototype.toString.call(e[r])){for(var o=[],n=0;n<e[r].length;++n)o.push(e[r][n]);t.push("("+o.join(",")+")")}else t.push(e[r]);e=t.join(",")}this.securityTags=e},o.prototype.setUserToken=function(e){this.userToken=e},o.prototype.clearCache=function(){this.cache={}},o.prototype.setRequestTimeout=function(e){e&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=e)},o.prototype.setTimeouts=function(e){this._timeouts=e},o.prototype.getTimeouts=function(){return this._timeouts},o.prototype._getAppIdData=function(){var e=p.get(this.applicationID);return null!==e&&this._cacheAppIdData(e),e},o.prototype._setAppIdData=function(e){return e.lastChange=(new Date).getTime(),this._cacheAppIdData(e),p.set(this.applicationID,e)},o.prototype._checkAppIdData=function(){var e=this._getAppIdData(),t=(new Date).getTime();return null===e||t-e.lastChange>d?this._resetInitialAppIdData(e):e},o.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||a([1,2,3]),this._setAppIdData(t)},o.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},o.prototype._partialAppIdDataUpdate=function(t){var r=e(4),o=this._getAppIdData();return r(t,function(e,t){o[t]=e}),this._setAppIdData(o)},o.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},o.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},o.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},o.prototype._setHostIndexByType=function(t,r){var o=e(22),n=o(this._hostIndexes);return n[r]=t,this._partialAppIdDataUpdate({hostIndexes:n}),t},o.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},o.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},o.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}}).call(this,e(11))},{1:1,11:11,16:16,22:22,25:25,26:26,27:27,29:29,31:31,4:4,7:7}],16:[function(e,t,r){function o(e,t){this.indexName=t,this.as=e,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}var n=e(21),i=e(23),a=e(24);t.exports=o,o.prototype.clearCache=function(){this.cache={}},o.prototype.search=n("query"),o.prototype.similarSearch=i(n("similarQuery"),a("index.similarSearch(query[, callback])","index.search({ similarQuery: query }[, callback])")),o.prototype.browse=function(t,r,o){var n,i,a=e(28),s=this;0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(n=0,o=arguments[0],t=void 0):"number"==typeof arguments[0]?(n=arguments[0],"number"==typeof arguments[1]?i=arguments[1]:"function"==typeof arguments[1]&&(o=arguments[1],i=void 0),t=void 0,r=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(o=arguments[1]),r=arguments[0],t=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(o=arguments[1],r=void 0),r=a({},r||{},{page:n,hitsPerPage:i,query:t});var u=this.as._getSearchParams(r,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(s.indexName)+"/browse",body:{params:u},hostType:"read",callback:o})},o.prototype.browseFrom=function(e,t){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:e},hostType:"read",callback:t})},o.prototype.searchForFacetValues=function(t,r){var o=e(22),n=e(29),i="Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])";if(void 0===t.facetName||void 0===t.facetQuery)throw new Error(i);var a=t.facetName,s=n(o(t),function(e){return"facetName"===e}),u=this.as._getSearchParams(s,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(a)+"/query",hostType:"read",body:{params:u},callback:r})},o.prototype.searchFacet=i(function(e,t){return this.searchForFacetValues(e,t)},a("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),o.prototype._search=function(e,t,r,o){return this.as._jsonRequest({cache:this.cache,method:"POST",url:t||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:e},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:e}},callback:r,additionalUA:o})},o.prototype.getObject=function(e,t,r){var o=this;1!==arguments.length&&"function"!=typeof t||(r=t,t=void 0);var n="";if(void 0!==t){n="?attributes=";for(var i=0;i<t.length;++i)0!==i&&(n+=","),n+=t[i]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(o.indexName)+"/"+encodeURIComponent(e)+n,hostType:"read",callback:r})},o.prototype.getObjects=function(t,r,o){var n=e(7),i=e(27),a="Usage: index.getObjects(arrayOfObjectIDs[, callback])";if(!n(t))throw new Error(a);var s=this;1!==arguments.length&&"function"!=typeof r||(o=r,
12470r=void 0);var u={requests:i(t,function(e){var t={indexName:s.indexName,objectID:e};return r&&(t.attributesToRetrieve=r.join(",")),t})};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:u,callback:o})},o.prototype.as=null,o.prototype.indexName=null,o.prototype.typeAheadArgs=null,o.prototype.typeAheadValueOption=null},{21:21,22:22,23:23,24:24,27:27,28:28,29:29,7:7}],17:[function(e,t,r){"use strict";var o=e(15),n=e(18);t.exports=n(o,"Browser (lite)")},{15:15,18:18}],18:[function(e,t,r){(function(r){"use strict";var o=e(5),n=o.Promise||e(3).Promise;t.exports=function(t,i){function a(t,r,o){var n=e(22);return o=n(o||{}),o._ua=o._ua||a.ua,new s(t,r,o)}function s(){t.apply(this,arguments)}var u=e(6),c=e(25),l=e(19),p=e(20),f=e(30);i=i||"","debug"===r.env.NODE_ENV&&e(1).enable("algoliasearch*"),a.version=e(32),a.ua="Algolia for JavaScript ("+a.version+"); "+i,a.initPlaces=f(a),o.__algolia={debug:e(1),algoliasearch:a};var d={hasXMLHttpRequest:"XMLHttpRequest"in o,hasXDomainRequest:"XDomainRequest"in o};return d.hasXMLHttpRequest&&(d.cors="withCredentials"in new XMLHttpRequest),u(s,t),s.prototype._request=function(e,t){return new n(function(r,o){function n(){if(!
12470h){clearTimeout(f);var e;try{e={body:JSON.parse(m.responseText),responseText:m.responseText,statusCode:m.status,headers:m.getAllResponseHeaders&&m.getAllResponseHeaders()||{}}}catch(t){e=new c.UnparsableJSON({more:m.responseText})}e instanceof c.UnparsableJSON?o(e):r(e)}}function i(e){h||(clearTimeout(f),o(new c.Network({more:e})))}function a(){h=!0,m.abort(),o(new c.RequestTimeout)}function s(){g=!0,clearTimeout(f),f=setTimeout(a,t.timeouts.complete)}function u(){g||s()}function p(){!g&&m.readyState>1&&s()}if(!d.cors&&!d.hasXDomainRequest)return void o(new c.Network("CORS not supported"));e=l(e,t.headers);var f,h,y=t.body,m=d.cors?new XMLHttpRequest:new XDomainRequest,g=!1;f=setTimeout(a,t.timeouts.connect),m.onprogress=u,"onreadystatechange"in m&&(m.onreadystatechange=p),m.onload=n,m.onerror=i,m instanceof XMLHttpRequest?(m.open(t.method,e,!0),t.forceAuthHeaders&&(m.setRequestHeader("x-algolia-application-id",t.headers["x-algolia-application-id"]),m.setRequestHeader("x-algolia-api-key",t.headers["x-algolia-api-key"]))):m.open(t.method,e),d.cors&&(y&&("POST"===t.method?m.setRequestHeader("content-type","application/x-www-form-urlencoded"):m.setRequestHeader("content-type","application/json")),m.setRequestHeader("accept","application/json")),y?m.send(y):m.send()})},s.prototype._request.fallback=function(e,t){return e=l(e,t.headers),new n(function(r,o){p(e,t,function(e,t){return e?void o(e):void r(t)})})},s.prototype._promise={reject:function(e){return n.reject(e)},resolve:function(e){return n.resolve(e)},delay:function(e){return new n(function(t){setTimeout(t,e)})},all:function(e){return n.all(e)}},a}}).call(this,e(11))},{1:1,11:11,19:19,20:20,22:22,25:25,3:3,30:30,32:32,5:5,6:6}],19:[function(e,t,r){"use strict";function o(e,t){return e+=/\?/.test(e)?"&":"?",e+n(t)}t.exports=o;var n=e(13)},{13:13}],20:[function(e,t,r){"use strict";function o(e,t,r){function o(){t.debug("JSONP: success"),m||f||(m=!0,p||(t.debug("JSONP: Fail. Script loaded but did not call the callback"),s(),r(new n.JSONPScriptFail)))}function a(){"loaded"!==this.readyState&&"complete"!==this.readyState||o()}function s(){clearTimeout(g),h.onload=null,h.onreadystatechange=null,h.onerror=null,d.removeChild(h)}function u(){try{delete window[y],delete window[y+"_loaded"]}catch(e){window[y]=window[y+"_loaded"]=void 0}}function c(){t.debug("JSONP: Script timeout"),f=!0,s(),r(new n.RequestTimeout)}function l(){t.debug("JSONP: Script error"),m||f||(s(),r(new n.JSONPScriptError))}if("GET"!==t.method)return void r(new Error("Method "+t.method+" "+e+" is not supported by JSONP."));t.debug("JSONP: start");var p=!1,f=!1;i+=1;var d=document.getElementsByTagName("head")[0],h=document.createElement("script"),y="algoliaJSONP_"+i,m=!1;window[y]=function(e){return u(),f?void t.debug("JSONP: Late answer, ignoring"):(p=!0,s(),void r(null,{body:e,responseText:JSON.stringify(e)}))},e+="&callback="+y,t.jsonBody&&t.jsonBody.params&&(e+="&"+t.jsonBody.params);var g=setTimeout(c,t.timeouts.complete);h.onreadystatechange=a,h.onload=o,h.onerror=l,h.async=!0,h.defer=!0,h.src=e,d.appendChild(h)}t.exports=o;var n=e(25),i=0},{25:25}
12470],21:[function(e,t,r){function o(e,t){return function(r,o,i){if("function"==typeof r&&"object"==typeof o||"object"==typeof i)throw new n.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof r?(i=r,r=""):1!==arguments.length&&"function"!=typeof o||(i=o,o=void 0),"object"==typeof r&&null!==r?(o=r,r=void 0):void 0!==r&&null!==r||(r="");var a="";void 0!==r&&(a+=e+"="+encodeURIComponent(r));var s;return void 0!==o&&(o.additionalUA&&(s=o.additionalUA,delete o.additionalUA),a=this.as._getSearchParams(o,a)),this._search(a,t,i,s)}}t.exports=o;var n=e(25)},{25:25}],22:[function(e,t,r){t.exports=function(e){return JSON.parse(JSON.stringify(e))}},{}],23:[function(e,t,r){t.exports=function(e,t){function r(){return o||(console.warn(t),o=!0),e.apply(this,arguments)}var o=!1;return r}},{}],24:[function(e,t,r){t.exports=function(e,t){var r=e.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+e+"` was replaced by `"+t+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+r}},{}],25:[function(e,t,r){"use strict";function o(t,r){var o=e(4),n=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):n.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",r&&o(r,function(e,t){n[t]=e})}function n(e,t){function r(){var r=Array.prototype.slice.call(arguments,0);"string"!=typeof r[0]&&r.unshift(t),o.apply(this,r),this.name="AlgoliaSearch"+e+"Error"}return i(r,o),r}var i=e(6);
12470i(o,Error),t.exports={AlgoliaSearchError:o,UnparsableJSON:n("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:n("RequestTimeout","Request timed out before getting a response"),Network:n("Network","Network issue, see err.more for details"),JSONPScriptFail:n("JSONPScriptFail","<script> was loaded but did not call our provided callback"),ValidUntilNotFound:n("ValidUntilNotFound","The SecuredAPIKey does not have a validUntil parameter."),JSONPScriptError:n("JSONPScriptError","<script> unable to load due to an `error` event on it"),ObjectNotFound:n("ObjectNotFound","Object not found"),Unknown:n("Unknown","Unknown error occured")}},{4:4,6:6}],26:[function(e,t,r){t.exports=function(e,t){t(e,0)}},{}],27:[function(e,t,r){var o=e(4);t.exports=function(e,t){var r=[];return o(e,function(o,n){r.push(t(o,n,e))}),r}},{4:4}],28:[function(e,t,r){var o=e(4);t.exports=function n(e){var t=Array.prototype.slice.call(arguments);return o(t,function(t){for(var r in t)t.hasOwnProperty(r)&&("object"==typeof e[r]&&"object"==typeof t[r]?e[r]=n({},e[r],t[r]):void 0!==t[r]&&(e[r]=t[r]))}),e}},{4:4}],29:[function(e,t,r){t.exports=function(t,r){var o=e(9),n=e(4),i={};return n(o(t),function(e){r(e)!==!0&&(i[e]=t[e])}),i}},{4:4,9:9}],30:[function(e,t,r){function o(t){return function(r,o,a){var s=e(22);a=a&&s(a)||{},a.hosts=a.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof r&&void 0!==r||(r="",o="",a._allowEmptyCredentials=!0);var u=t(r,o,a),c=u.initIndex("places");return c.search=i("query","/1/places/query"),c.reverse=function(e,t){var r=n.encode(e);return this.as._jsonRequest({method:"GET",url:"/1/places/reverse?"+r,hostType:"read",callback:t})},c.getObject=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(e),hostType:"read",callback:t})},c}}t.exports=o;var n=e(14),i=e(21)},{14:14,21:21,22:22}],31:[function(e,t,r){(function(r){function o(e,t){return u("localStorage failed with",t),a(),s=l,s.get(e)}function n(e,t){return 1===arguments.length?s.get(e):s.set(e,t)}function i(){try{return"localStorage"in r&&null!==r.localStorage&&(r.localStorage[c]||r.localStorage.setItem(c,JSON.stringify({})),!0)}catch(e){return!1}}function a(){try{r.localStorage.removeItem(c)}catch(e){}}var s,u=e(1)("algoliasearch:src/hostIndexState.js"),c="algoliasearch-client-js",l={state:{},set:function(e,t){return this.state[e]=t,this.state[e]},get:function(e){return this.state[e]||null}},p={set:function(e,t){l.set(e,t);try{var n=JSON.parse(r.localStorage[c]);return n[e]=t,r.localStorage[c]=JSON.stringify(n),n[e]}catch(i){return o(e,i)}},get:function(e){try{return JSON.parse(r.localStorage[c])[e]||null}catch(t){return o(e,t)}}};s=i()?p:l,t.exports={get:n,set:n,supportsLocalStorage:i}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{1:1}],32:[function(e,t,r){"use strict";t.exports="3.35.1"},{}]},{},[17])(17)});
12471/*!
12472 * autocomplete.js 0.36.0
12473 * https://github.com/algolia/autocomplete.js
12474 * Copyright 2019
vendor: 18,400 bytes, lines 12474-12476
12474 Algolia, Inc. and other contributors; Licensed MIT
12475 */
12476!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.autocomplete=b():a.autocomplete=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";a.exports=c(1)},function(a,b,c){"use strict";function d(a,b,c,d){c=f.isArray(c)?c:[].slice.call(arguments,2);var j=e(a).each(function(a,f){var j=e(f),k=new i({el:j}),l=d||new h({input:j,eventBus:k,dropdownMenuContainer:b.dropdownMenuContainer,hint:void 0===b.hint||!!b.hint,minLength:b.minLength,autoselect:b.autoselect,autoselectOnBlur:b.autoselectOnBlur,tabAutocomplete:b.tabAutocomplete,openOnFocus:b.openOnFocus,templates:b.templates,debug:b.debug,clearOnSelected:b.clearOnSelected,cssClasses:b.cssClasses,datasets:c,keyboardShortcuts:b.keyboardShortcuts,appendTo:b.appendTo,autoWidth:b.autoWidth,ariaLabel:b.ariaLabel||f.getAttribute("aria-label")});j.data(g,l)});return j.autocomplete={},f.each(["open","close","getVal","setVal","destroy","getWrapper"],function(a){j.autocomplete[a]=function(){var b,c=arguments;return j.each(function(d,f){var h=e(f).data(g);b=h[a].apply(h,c)}),b}}),j}var e=c(2);c(3).element=e;var f=c(4);f.isArray=e.isArray,f.isFunction=e.isFunction,f.isObject=e.isPlainObject,f.bind=e.proxy,f.each=function(a,b){function c(a,c){return b(c,a)}e.each(a,c)},f.map=e.map,f.mixin=e.extend,f.Event=e.Event;var g="aaAutocomplete",h=c(5),i=c(6);d.sources=h.sources,d.escapeHighlightedString=f.escapeHighlightedString;var j="autocomplete"in window,k=window.autocomplete;d.noConflict=function(){return j?window.autocomplete=k:delete window.autocomplete,d},a.exports=d},function(a,b){!function(b,c){a.exports=function(a){var b=function(){function b(a){return null==a?String(a):V[W.call(a)]||"object"}function c(a){return"function"==b(a)}function d(a){return null!=a&&a==a.window}function e(a){return null!=a&&a.nodeType==a.DOCUMENT_NODE}function f(a){return"object"==b(a)}function g(a){return f(a)&&!d(a)&&Object.getPrototypeOf(a)==Object.prototype}function h(a){var b=!!a&&"length"in a&&a.length,c=z.type(a);return"function"!=c&&!d(a)&&("array"==c||0===b||"number"==typeof b&&b>0&&b-1 in a)}function i(a){return F.call(a,function(a){return null!=a})}function j(a){return a.length>0?z.fn.concat.apply([],a):a}function k(a){return a.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function l(a){return a in J?J[a]:J[a]=new RegExp("(^|\\s)"+a+"(\\s|$)")}function m(a,b){return"number"!=typeof b||K[k(a)]?b:b+"px"}function n(a){var b,c;return I[a]||(b=H.createElement(a),H.body.appendChild(b),c=getComputedStyle(b,"").getPropertyValue("display"),b.parentNode.removeChild(b),"none"==c&&(c="block"),I[a]=c),I[a]}function o(a){return"children"in a?G.call(a.children):z.map(a.childNodes,function(a){if(1==a.nodeType)return a})}function p(a,b){var c,d=a?a.length:0;for(c=0;c<d;c++)this[c]=a[c];this.length=d,this.selector=b||""}function q(a,b,c){for(y in b)c&&(g(b[y])||$(b[y]))?(g(b[y])&&!g(a[y])&&(a[y]={}),$(b[y])&&!$(a[y])&&(a[y]=[]),q(a[y],b[y],c)):b[y]!==x&&(a[y]=b[y])}function r(a,b){return null==b?z(a):z(a).filter(b)}function s(a,b,d,e){return c(b)?b.call(a,d,e):b}function t(a,b,c){null==c?a.removeAttribute(b):a.setAttribute(b,c)}function u(a,b){var c=a.className||"",d=c&&c.baseVal!==x;if(b===x)return d?c.baseVal:c;d?c.baseVal=b:a.className=b}function v(a){try{return a?"true"==a||"false"!=a&&("null"==a?null:+a+""==a?+a:/^[\[\{]/.test(a)?z.parseJSON(a):a):a}catch(b){return a}}function w(a,b){b(a);for(var c=0,d=a.childNodes.length;c<d;c++)w(a.childNodes[c],b)}var x,y,z,A,B,C,D=[],E=D.concat,F=D.filter,G=D.slice,H=a.document,I={},J={},K={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},L=/^\s*<(\w+|!)[^>]*>/,M=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,N=/^(?:body|html)$/i,O=["val","css","html","text","data","width","height","offset"],P=["after","prepend","before","append"],Q=H.createElement("table"),R=H.createElement("tr"),S={tr:H.createElement("tbody"),tbody:Q,thead:Q,tfoot:Q,td:R,th:R,"*":H.createElement("div")},T=/complete|loaded|interactive/,U=/^[\w-]*$/,V={},W=V.toString,X={},Y=H.createElement("div"),Z={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},$=Array.isArray||function(a){return a instanceof Array};return X.matches=function(a,b){if(!b||!a||1!==a.nodeType)return!1;var c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.matchesSelector;if(c)return c.call(a,b);var d,e=a.parentNode,f=!e;return f&&(e=Y).appendChild(a),d=~X.qsa(e,b).indexOf(a),f&&Y.removeChild(a),d},B=function(a){return a.replace(/-+(.)?/g,function(a,b){return b?b.toUpperCase():""})},C=function(a){return F.call(a,function(b,c){return a.indexOf(b)==c})},X.fragment=function(a,b,c){var d,e,f;return M.test(a)&&(d=z(H.createElement(RegExp.$1))),d||(a.replace&&(a=a.replace(/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,"<$1></$2>")),b===x&&(b=L.test(a)&&RegExp.$1),b in S||(b="*"),f=S[b],f.innerHTML=""+a,d=z.each(G.call(f.childNodes),function(){f.removeChild(this)})),g(c)&&(e=z(d),z.each(c,function(a,b){O.indexOf(a)>-1?e[a](b):e.attr(a,b)})),d},X.Z=function(a,b){return new p(a,b)},X.isZ=function(a){return a instanceof X.Z},X.init=function(a,b){var d;if(!a)return X.Z();if("string"==typeof a)if(a=a.trim(),"<"==a[0]&&L.test(a))d=X.fragment(a,RegExp.$1,b),a=null;else{if(b!==x)return z(b).find(a);d=X.qsa(H,a)}else{if(c(a))return z(H).ready(a);if(X.isZ(a))return a;if($(a))d=i(a);else if(f(a))d=[a],a=null;else if(L.test(a))d=X.fragment(a.trim(),RegExp.$1,b),a=null;else{if(b!==x)return z(b).find(a);d=X.qsa(H,a)}}return X.Z(d,a)},z=function(a,b){return X.init(a,b)},z.extend=function(a){var b,c=G.call(arguments,1);return"boolean"==typeof a&&(b=a,a=c.shift()),c.forEach(function(c){q(a,c,b)}),a},X.qsa=function(a,b){var c,d="#"==b[0],e=!d&&"."==b[0],f=d||e?b.slice(1):b,g=U.test(f);return a.getElementById&&g&&d?(c=a.getElementById(f))?[c]:[]:1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType?[]:G.call(g&&!d&&a.getElementsByClassName?e?a.getElementsByClassName(f):a.getElementsByTagName(b):a.querySelectorAll(b))},z.contains=H.documentElement.contains?function(a,b){return a!==b&&a.contains(b)}:function(a,b){for(;b&&(b=b.parentNode);)if(b===a)return!0;return!1},z.type=b,z.isFunction=c,z.isWindow=d,z.isArray=$,z.isPlainObject=g,z.isEmptyObject=function(a){var b;for(b in a)return!1;return!0},z.isNumeric=function(a){var b=Number(a),c=typeof a;return null!=a&&"boolean"!=c&&("string"!=c||a.length)&&!isNaN(b)&&isFinite(b)||!1},z.inArray=function(a,b,c){return D.indexOf.call(b,a,c)},z.camelCase=B,z.trim=function(a){return null==a?"":String.prototype.trim.call(a)},z.uuid=0,z.support={},z.expr={},z.noop=function(){},z.map=function(a,b){var c,d,e,f=[];if(h(a))for(d=0;d<a.length;d++)null!=(c=b(a[d],d))&&f.push(c);else for(e in a)null!=(c=b(a[e],e))&&f.push(c);return j(f)},z.each=function(a,b){var c,d;if(h(a)){for(c=0;c<a.length;c++)if(b.call(a[c],c,a[c])===!1)return a}else for(d in a)if(b.call(a[d],d,a[d])===!1)return a;return a},z.grep=function(a,b){return F.call(a,b)},a.JSON&&(z.parseJSON=JSON.parse),z.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){V["[object "+b+"]"]=b.toLowerCase()}),z.fn={constructor:X.Z,length:0,forEach:D.forEach,reduce:D.reduce,push:D.push,sort:D.sort,splice:D.splice,indexOf:D.indexOf,concat:function(){var a,b,c=[];for(a=0;a<arguments.length;a++)b=arguments[a],c[a]=X.isZ(b)?b.toArray():b;return E.apply(X.isZ(this)?this.toArray():this,c)},map:function(a){return z(z.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return z(G.apply(this,arguments))},ready:function(a){return T.test(H.readyState)&&H.body?a(z):H.addEventListener("DOMContentLoaded",function(){a(z)},!1),this},get:function(a){return a===x?G.call(this):this[a>=0?a:a+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(a){return D.every.call(this,function(b,c){return a.call(b,c,b)!==!1}),this},filter:function(a){return c(a)?this.not(this.not(a)):z(F.call(this,function(b){return X.matches(b,a)}))},add:function(a,b){return z(C(this.concat(z(a,b))))},is:function(a){return this.length>0&&X.matches(this[0],a)},not:function(a){var b=[];if(c(a)&&a.call!==x)this.each(function(c){a.call(this,c)||b.push(this)});else{var d="string"==typeof a?this.filter(a):h(a)&&c(a.item)?G.call(a):z(a);this.forEach(function(a){d.indexOf(a)<0&&b.push(a)})}return z(b)},has:function(a){return this.filter(function(){return f(a)?z.contains(this,a):z(this).find(a).size()})},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){var a=this[0];return a&&!f(a)?a:z(a)},last:function(){var a=this[this.length-1];return a&&!f(a)?a:z(a)},find:function(a){var b=this;return a?"object"==typeof a?z(a).filter(function(){var a=this;return D.some.call(b,function(b){return z.contains(b,a)})}):1==this.length?z(X.qsa(this[0],a)):this.map(function(){return X.qsa(this,a)}):z()},closest:function(a,b){var c=[],d="object"==typeof a&&z(a);return this.each(function(f,g){for(;g&&!(d?d.indexOf(g)>=0:X.matches(g,a));)g=g!==b&&!e(g)&&g.parentNode;g&&c.indexOf(g)<0&&c.push(g)}),z(c)},parents:function(a){for(var b=[],c=this;c.length>0;)c=z.map(c,function(a){if((a=a.parentNode)&&!e(a)&&b.indexOf(a)<0)return b.push(a),a});return r(b,a)},parent:function(a){return r(C(this.pluck("parentNode")),a)},children:function(a){return r(this.map(function(){return o(this)}),a)},contents:function(){return this.map(function(){return this.contentDocument||G.call(this.childNodes)})},siblings:function(a){return r(this.map(function(a,b){return F.call(o(b.parentNode),function(a){return a!==b})}),a)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(a){return z.map(this,function(b){return b[a]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=n(this.nodeName))})},replaceWith:function(a){return this.before(a).remove()},wrap:function(a){var b=c(a);if(this[0]&&!b)var d=z(a).get(0),e=d.parentNode||this.length>1;return this.each(function(c){z(this).wrapAll(b?a.call(this,c):e?d.cloneNode(!0):d)})},wrapAll:function(a){if(this[0]){z(this[0]).before(a=z(a));for(var b;(b=a.children()).length;)a=b.first();z(a).append(this)}return this},wrapInner:function(a){var b=c(a);return this.each(function(c){var d=z(this),e=d.contents(),f=b?a.call(this,c):a;e.length?e.wrapAll(f):d.append(f)})},unwrap:function(){return this.parent().each(function(){z(this).replaceWith(z(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(a){return this.each(function(){var b=z(this);(a===x?"none"==b.css("display"):a)?b.show():b.hide()})},prev:function(a){return z(this.pluck("previousElementSibling")).filter(a||"*")},next:function(a){return z(this.pluck("nextElementSibling")).filter(a||"*")},html:function(a){return 0 in arguments?this.each(function(b){var c=this.innerHTML;z(this).empty().append(s(this,a,b,c))}):0 in this?this[0].innerHTML:null},text:function(a){return 0 in arguments?this.each(function(b){var c=s(this,a,b,this.textContent);this.textContent=null==c?"":""+c}):0 in this?this.pluck("textContent").join(""):null},attr:function(a,b){var c;return"string"!=typeof a||1 in arguments?this.each(function(c){if(1===this.nodeType)if(f(a))for(y in a)t(this,y,a[y]);else t(this,a,s(this,b,c,this.getAttribute(a)))}):0 in this&&1==this[0].nodeType&&null!=(c=this[0].getAttribute(a))?c:x},removeAttr:function(a){return this.each(function(){1===this.nodeType&&a.split(" ").forEach(function(a){t(this,a)},this)})},prop:function(a,b){return a=Z[a]||a,1 in arguments?this.each(function(c){this[a]=s(this,b,c,this[a])}):this[0]&&this[0][a]},removeProp:function(a){return a=Z[a]||a,this.each(function(){delete this[a]})},data:function(a,b){var c="data-"+a.replace(/([A-Z])/g,"-$1").toLowerCase(),d=1 in arguments?this.attr(c,b):this.attr(c);return null!==d?v(d):x},val:function(a){return 0 in arguments?(null==a&&(a=""),this.each(function(b){this.value=s(this,a,b,this.value)})):this[0]&&(this[0].multiple?z(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(b){if(b)return this.each(function(a){var c=z(this),d=s(this,b,a,c.offset()),e=c.offsetParent().offset(),f={top:d.top-e.top,left:d.left-e.left};"static"==c.css("position")&&(f.position="relative"),c.css(f)});if(!this.length)return null;if(H.documentElement!==this[0]&&!z.contains(H.documentElement,this[0]))return{top:0,left:0};var c=this[0].getBoundingClientRect();return{left:c.left+a.pageXOffset,top:c.top+a.pageYOffset,width:Math.round(c.width),height:Math.round(c.height)}},css:function(a,c){if(arguments.length<2){var d=this[0];if("string"==typeof a){if(!d)return;return d.style[B(a)]||getComputedStyle(d,"").getPropertyValue(a)}if($(a)){if(!d)return;var e={},f=getComputedStyle(d,"");return z.each(a,function(a,b){e[b]=d.style[B(b)]||f.getPropertyValue(b)}),e}}var g="";if("string"==b(a))c||0===c?g=k(a)+":"+m(a,c):this.each(function(){this.style.removeProperty(k(a))});else for(y in a)a[y]||0===a[y]?g+=k(y)+":"+m(y,a[y])+";":this.each(function(){this.style.removeProperty(k(y))});return this.each(function(){this.style.cssText+=";"+g})},index:function(a){return a?this.indexOf(z(a)[0]):this.parent().children().indexOf(this[0])},hasClass:function(a){return!!a&&D.some.call(this,function(a){return this.test(u(a))},l(a))},addClass:function(a){return a?this.each(function(b){if("className"in this){A=[];var c=u(this);s(this,a,b,c).split(/\s+/g).forEach(function(a){z(this).hasClass(a)||A.push(a)},this),A.length&&u(this,c+(c?" ":"")+A.join(" "))}}):this},removeClass:function(a){return this.each(function(b){if("className"in this){if(a===x)return u(this,"");A=u(this),s(this,a,b,A).split(/\s+/g).forEach(function(a){A=A.replace(l(a)," ")}),u(this,A.trim())}})},toggleClass:function(a,b){return a?this.each(function(c){var d=z(this);s(this,a,c,u(this)).split(/\s+/g).forEach(function(a){(b===x?!d.hasClass(a):b)?d.addClass(a):d.removeClass(a)})}):this},scrollTop:function(a){if(this.length){var b="scrollTop"in this[0];return a===x?b?this[0].scrollTop:this[0].pageYOffset:this.each(b?function(){this.scrollTop=a}:function(){this.scrollTo(this.scrollX,a)})}},scrollLeft:function(a){if(this.length){var b="scrollLeft"in this[0];return a===x?b?this[0].scrollLeft:this[0].pageXOffset:this.each(b?function(){this.scrollLeft=a}:function(){this.scrollTo(a,this.scrollY)})}},position:function(){if(this.length){var a=this[0],b=this.offsetParent(),c=this.offset(),d=N.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(z(a).css("margin-top"))||0,c.left-=parseFloat(z(a).css("margin-left"))||0,d.top+=parseFloat(z(b[0]).css("border-top-width"))||0,d.left+=parseFloat(z(b[0]).css("border-left-width"))||0,{top:c.top-d.top,left:c.left-d.left}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||H.body;a&&!N.test(a.nodeName)&&"static"==z(a).css("position");)a=a.offsetParent;return a})}},z.fn.detach=z.fn.remove,["width","height"].forEach(function(a){var b=a.replace(/./,function(a){return a[0].toUpperCase()});z.fn[a]=function(c){var f,g=this[0];return c===x?d(g)?g["inner"+b]:e(g)?g.documentElement["scroll"+b]:(f=this.offset())&&f[a]:this.each(function(b){g=z(this),g.css(a,s(this,c,b,g[a]()))})}}),P.forEach(function(c,d){var e=d%2;z.fn[c]=function(){var c,f,g=z.map(arguments,function(a){var d=[];return c=b(a),"array"==c?(a.forEach(function(a){return a.nodeType!==x?d.push(a):z.zepto.isZ(a)?d=d.concat(a.get()):void(d=d.concat(X.fragment(a)))}),d):"object"==c||null==a?a:X.fragment(a)}),h=this.length>1;return g.length<1?this:this.each(function(b,c){f=e?c:c.parentNode,c=0==d?c.nextSibling:1==d?c.firstChild:2==d?c:null;var i=z.contains(H.documentElement,f);g.forEach(function(b){if(h)b=b.cloneNode(!0);else if(!f)return z(b).remove();f.insertBefore(b,c),i&&w(b,function(b){if(!(null==b.nodeName||"SCRIPT"!==b.nodeName.toUpperCase()||b.type&&"text/javascript"!==b.type||b.src)){var c=b.ownerDocument?b.ownerDocument.defaultView:a;c.eval.call(c,b.innerHTML)}})})})},z.fn[e?c+"To":"insert"+(d?"Before":"After")]=function(a){return z(a)[c](this),this}}),X.Z.prototype=p.prototype=z.fn,X.uniq=C,X.deserializeValue=v,z.zepto=X,z}();return function(b){function c(a){return a._zid||(a._zid=n++)}function d(a,b,d,g){if(b=e(b),b.ns)var h=f(b.ns);return(r[c(a)]||[]).filter(function(a){return a&&(!b.e||a.e==b.e)&&(!b.ns||h.test(a.ns))&&(!d||c(a.fn)===c(d))&&(!g||a.sel==g)})}function e(a){var b=(""+a).split(".");return{e:b[0],ns:b.slice(1).sort().join(" ")}}function f(a){return new RegExp("(?:^| )"+a.replace(" "," .* ?")+"(?: |$)")}function g(a,b){return a.del&&!t&&a.e in u||!!b}function h(a){return v[a]||t&&u[a]||a}function i(a,d,f,i,j,l,n){var o=c(a),p=r[o]||(r[o]=[]);d.split(/\s/).forEach(function(c){if("ready"==c)return b(document).ready(f);var d=e(c);d.fn=f,d.sel=j,d.e in v&&(f=function(a){var c=a.relatedTarget;if(!c||c!==this&&!b.contains(this,c))return d.fn.apply(this,arguments)}),d.del=l;var o=l||f;d.proxy=function(b){if(b=k(b),!b.isImmediatePropagationStopped()){try{var c=Object.getOwnPropertyDescriptor(b,"data");c&&!c.writable||(b.data=i)}catch(b){}var d=o.apply(a,b._args==m?[b]:[b].concat(b._args));return d===!1&&(b.preventDefault(),b.stopPropagation()),d}},d.i=p.length,p.push(d),"addEventListener"in a&&a.addEventListener(h(d.e),d.proxy,g(d,n))})}function j(a,b,e,f,i){var j=c(a);(b||"").split(/\s/).forEach(function(b){d(a,b,e,f).forEach(function(b){delete r[j][b.i],"removeEventListener"in a&&a.removeEventListener(h(b.e),b.proxy,g(b,i))})})}function k(a,c){
vendor: 332 bytes, line 12476
12476return!c&&a.isDefaultPrevented||(c||(c=a),b.each(z,function(b,d){var e=c[b];a[b]=function(){return this[d]=w,e&&e.apply(c,arguments)},a[d]=x}),a.timeStamp||(a.timeStamp=Date.now()),(c.defaultPrevented!==m?c.defaultPrevented:"returnValue"in c?c.returnValue===!1:c.getPreventDefault&&c.getPreventDefault())&&(a.isDefaultPrevented=w)),
vendor: 13,280 bytes, line 12476
12476a}function l(a){var b,c={originalEvent:a};for(b in a)y.test(b)||a[b]===m||(c[b]=a[b]);return k(c,a)}var m,n=1,o=Array.prototype.slice,p=b.isFunction,q=function(a){return"string"==typeof a},r={},s={},t="onfocusin"in a,u={focus:"focusin",blur:"focusout"},v={mouseenter:"mouseover",mouseleave:"mouseout"};s.click=s.mousedown=s.mouseup=s.mousemove="MouseEvents",b.event={add:i,remove:j},b.proxy=function(a,d){var e=2 in arguments&&o.call(arguments,2);if(p(a)){var f=function(){return a.apply(d,e?e.concat(o.call(arguments)):arguments)};return f._zid=c(a),f}if(q(d))return e?(e.unshift(a[d],a),b.proxy.apply(null,e)):b.proxy(a[d],a);throw new TypeError("expected function")},b.fn.bind=function(a,b,c){return this.on(a,b,c)},b.fn.unbind=function(a,b){return this.off(a,b)},b.fn.one=function(a,b,c,d){return this.on(a,b,c,d,1)};var w=function(){return!0},x=function(){return!1},y=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,z={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};b.fn.delegate=function(a,b,c){return this.on(b,a,c)},b.fn.undelegate=function(a,b,c){return this.off(b,a,c)},b.fn.live=function(a,c){return b(document.body).delegate(this.selector,a,c),this},b.fn.die=function(a,c){return b(document.body).undelegate(this.selector,a,c),this},b.fn.on=function(a,c,d,e,f){var g,h,k=this;return a&&!q(a)?(b.each(a,function(a,b){k.on(a,c,d,b,f)}),k):(q(c)||p(e)||e===!1||(e=d,d=c,c=m),e!==m&&d!==!1||(e=d,d=m),e===!1&&(e=x),k.each(function(k,m){f&&(g=function(a){return j(m,a.type,e),e.apply(this,arguments)}),c&&(h=function(a){var d,f=b(a.target).closest(c,m).get(0);if(f&&f!==m)return d=b.extend(l(a),{currentTarget:f,liveFired:m}),(g||e).apply(f,[d].concat(o.call(arguments,1)))}),i(m,a,e,d,c,h||g)}))},b.fn.off=function(a,c,d){var e=this;return a&&!q(a)?(b.each(a,function(a,b){e.off(a,c,b)}),e):(q(c)||p(d)||d===!1||(d=c,c=m),d===!1&&(d=x),e.each(function(){j(this,a,d,c)}))},b.fn.trigger=function(a,c){return a=q(a)||b.isPlainObject(a)?b.Event(a):k(a),a._args=c,this.each(function(){a.type in u&&"function"==typeof this[a.type]?this[a.type]():"dispatchEvent"in this?this.dispatchEvent(a):b(this).triggerHandler(a,c)})},b.fn.triggerHandler=function(a,c){var e,f;return this.each(function(g,h){e=l(q(a)?b.Event(a):a),e._args=c,e.target=h,b.each(d(h,a.type||a),function(a,b){if(f=b.proxy(e),e.isImmediatePropagationStopped())return!1})}),f},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(a){b.fn[a]=function(b){return 0 in arguments?this.bind(a,b):this.trigger(a)}}),b.Event=function(a,b){q(a)||(b=a,a=b.type);var c=document.createEvent(s[a]||"Events"),d=!0;if(b)for(var e in b)"bubbles"==e?d=!!b[e]:c[e]=b[e];return c.initEvent(a,d,!0),k(c)}}(b),function(a){var b,c=[];a.fn.remove=function(){return this.each(function(){this.parentNode&&("IMG"===this.tagName&&(c.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",b&&clearTimeout(b),b=setTimeout(function(){c=[]},6e4)),this.parentNode.removeChild(this))})}}(b),function(a){function b(b,d){var i=b[h],j=i&&e[i];if(void 0===d)return j||c(b);if(j){if(d in j)return j[d];var k=g(d);if(k in j)return j[k]}return f.call(a(b),d)}function c(b,c,f){var i=b[h]||(b[h]=++a.uuid),j=e[i]||(e[i]=d(b));return void 0!==c&&(j[g(c)]=f),j}function d(b){var c={};return a.each(b.attributes||i,function(b,d){0==d.name.indexOf("data-")&&(c[g(d.name.replace("data-",""))]=a.zepto.deserializeValue(d.value))}),c}var e={},f=a.fn.data,g=a.camelCase,h=a.expando="Zepto"+ +new Date,i=[];a.fn.data=function(d,e){return void 0===e?a.isPlainObject(d)?this.each(function(b,e){a.each(d,function(a,b){c(e,a,b)})}):0 in this?b(this[0],d):void 0:this.each(function(){c(this,d,e)})},a.data=function(b,c,d){return a(b).data(c,d)},a.hasData=function(b){var c=b[h],d=c&&e[c];return!!d&&!a.isEmptyObject(d)},a.fn.removeData=function(b){return"string"==typeof b&&(b=b.split(/\s+/)),this.each(function(){var c=this[h],d=c&&e[c];d&&a.each(b||d,function(a){delete d[b?g(this):a]})})},["remove","empty"].forEach(function(b){var c=a.fn[b];a.fn[b]=function(){var a=this.find("*");return"remove"===b&&(a=a.add(this)),a.removeData(),c.call(this)}})}(b),b}(b)}(window)},function(a,b){"use strict";a.exports={element:null}},function(a,b,c){"use strict";function d(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var e=c(3);a.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(a){if(void 0===a&&(a=navigator.userAgent),/(msie|trident)/i.test(a)){var b=a.match(/(msie |rv:)(\d+(.\d+)?)/i);if(b)return b[2]}return!1},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(a){return"number"==typeof a},toStr:function(a){return void 0===a||null===a?"":a+""},cloneDeep:function(a){var b=this.mixin({},a),c=this;return this.each(b,function(a,d){a&&(c.isArray(a)?b[d]=[].concat(a):c.isObject(a)&&(b[d]=c.cloneDeep(a)))}),b},error:function(a){throw new Error(a)},every:function(a,b){var c=!0;return a?(this.each(a,function(d,e){c&&(c=b.call(null,d,e,a)&&c)}),!!c):c},any:function(a,b){var c=!1;return a?(this.each(a,function(d,e){if(b.call(null,d,e,a))return c=!0,!1}),c):c},getUniqueId:function(){var a=0;return function(){return a++}}(),templatify:function(a){if(this.isFunction(a))return a;var b=e.element(a);return"SCRIPT"===b.prop("tagName")?function(){return b.text()}:function(){return String(a)}},defer:function(a){setTimeout(a,0)},noop:function(){},formatPrefix:function(a,b){return b?"":a+"-"},className:function(a,b,c){return(c?"":".")+a+b},escapeHighlightedString:function(a,b,c){b=b||"<em>";var e=document.createElement("div");e.appendChild(document.createTextNode(b)),c=c||"</em>";var f=document.createElement("div");f.appendChild(document.createTextNode(c));var g=document.createElement("div");return g.appendChild(document.createTextNode(a)),g.innerHTML.replace(RegExp(d(e.innerHTML),"g"),b).replace(RegExp(d(f.innerHTML),"g"),c)}}},function(a,b,c){"use strict";function d(a){var b,c;if(a=a||{},a.input||i.error("missing input"),this.isActivated=!1,this.debug=!!a.debug,this.autoselect=!!a.autoselect,this.autoselectOnBlur=!!a.autoselectOnBlur,this.openOnFocus=!!a.openOnFocus,this.minLength=i.isNumber(a.minLength)?a.minLength:1,this.autoWidth=void 0===a.autoWidth||!!a.autoWidth,this.clearOnSelected=!!a.clearOnSelected,this.tabAutocomplete=void 0===a.tabAutocomplete||!!a.tabAutocomplete,a.hint=!!a.hint,a.hint&&a.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=a.css=i.mixin({},o,a.appendTo?o.appendTo:{}),this.cssClasses=a.cssClasses=i.mixin({},o.defaultClasses,a.cssClasses||{}),this.cssClasses.prefix=a.cssClasses.formattedPrefix=i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=a.listboxId=[this.cssClasses.root,"listbox",i.getUniqueId()].join("-");var f=e(a);this.$node=f.wrapper;var g=this.$input=f.input;b=f.menu,c=f.hint,a.dropdownMenuContainer&&j.element(a.dropdownMenuContainer).css("position","relative").append(b.css("top","0")),g.on("blur.aa",function(a){var c=document.activeElement;i.isMsie()&&(b[0]===c||b[0].contains(c))&&(a.preventDefault(),a.stopImmediatePropagation(),i.defer(function(){g.focus()}))}),b.on("mousedown.aa",function(a){a.preventDefault()}),this.eventBus=a.eventBus||new k({el:g}),this.dropdown=new d.Dropdown({appendTo:a.appendTo,wrapper:this.$node,menu:b,datasets:a.datasets,templates:a.templates,cssClasses:a.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new d.Input({input:g,hint:c}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(a),this._setLanguageDirection()}function e(a){var b,c,d,e;b=j.element(a.input),c=j.element(n.wrapper.replace("%ROOT%",a.cssClasses.root)).css(a.css.wrapper),a.appendTo||"block"!==b.css("display")||"table"!==b.parent().css("display")||c.css("display","table-cell");var g=n.dropdown.replace("%PREFIX%",a.cssClasses.prefix).replace("%DROPDOWN_MENU%",a.cssClasses.dropdownMenu);d=j.element(g).css(a.css.dropdown).attr({role:"listbox",id:a.listboxId}),a.templates&&a.templates.dropdownMenu&&d.html(i.templatify(a.templates.dropdownMenu)()),e=b.clone().css(a.css.hint).css(f(b)),e.val("").addClass(i.className(a.cssClasses.prefix,a.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),e.removeData&&e.removeData(),b.data(h,{"aria-autocomplete":b.attr("aria-autocomplete"),"aria-expanded":b.attr("aria-expanded"),"aria-owns":b.attr("aria-owns"),autocomplete:b.attr("autocomplete"),dir:b.attr("dir"),role:b.attr("role"),spellcheck:b.attr("spellcheck"),style:b.attr("style"),type:b.attr("type")}),b.addClass(i.className(a.cssClasses.prefix,a.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":a.datasets&&a.datasets[0]&&a.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":a.ariaLabel,"aria-owns":a.listboxId}).css(a.hint?a.css.input:a.css.inputWithNoHint);try{b.attr("dir")||b.attr("dir","auto")}catch(a){}return c=a.appendTo?c.appendTo(j.element(a.appendTo).eq(0)).eq(0):b.wrap(c).parent(),c.prepend(a.hint?e:null).append(d),{wrapper:c,input:b,hint:e,menu:d}}function f(a){return{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}}function g(a,b){var c=a.find(i.className(b.prefix,b.input));i.each(c.data(h),function(a,b){void 0===a?c.removeAttr(b):c.attr(b,a)}),c.detach().removeClass(i.className(b.prefix,b.input,!0)).insertAfter(a),c.removeData&&c.removeData(h),a.remove()}var h="aaAttrs",i=c(4),j=c(3),k=c(6),l=c(7),m=c(16),n=c(18),o=c(19);i.mixin(d.prototype,{_bindKeyboardShortcuts:function(a){if(a.keyboardShortcuts){var b=this.$input,c=[];i.each(a.keyboardShortcuts,function(a){"string"==typeof a&&(a=a.toUpperCase().charCodeAt(0)),c.push(a)}),j.element(document).keydown(function(a){var d=a.target||a.srcElement,e=d.tagName;if(!d.isContentEditable&&"INPUT"!==e&&"SELECT"!==e&&"TEXTAREA"!==e){var f=a.which||a.keyCode;c.indexOf(f)!==-1&&(b.focus(),a.stopPropagation(),a.preventDefault())}})}},_onSuggestionClicked:function(a,b){var c,d={selectionMethod:"click"};(c=this.dropdown.getDatumForSuggestion(b))&&this._select(c,d)},_onCursorMoved:function(a,b){var c=this.dropdown.getDatumForCursor(),d=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(d),c&&(b&&this.input.setInputValue(c.value,!0),this.eventBus.trigger("cursorchanged",c.raw,c.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var a=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",a.width+"px");var b=this.$node[0].getBoundingClientRect(),c=a.bottom-b.top;this.$node.css("top",c+"px");var d=a.left-b.left;this.$node.css("left",d+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var a=this.input.getQuery();a.length>=this.minLength?this.dropdown.update(a):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var a,b;a=this.dropdown.getDatumForCursor(),b=this.dropdown.getDatumForTopSuggestion();var c={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&a?this._select(a,c):this.autoselectOnBlur&&b?this._select(b,c):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(a,b){var c,d
12476;c=this.dropdown.getDatumForCursor(),
vendor: 8,384 bytes, line 12477
12477d=this.dropdown.getDatumForTopSuggestion();var e={selectionMethod:"enterKey"};c?(this._select(c,e),b.preventDefault()):this.autoselect&&d&&(this._select(d,e),b.preventDefault())},_onTabKeyed:function(a,b){if(!this.tabAutocomplete)return void this.dropdown.close();var c,d={selectionMethod:"tabKey"};(c=this.dropdown.getDatumForCursor())?(this._select(c,d),b.preventDefault()):this._autocomplete(!0)},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var a=this.input.getQuery();this.dropdown.isEmpty&&a.length>=this.minLength?this.dropdown.update(a):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(a,b){this.input.clearHintIfInvalid(),b.length>=this.minLength?this.dropdown.update(b):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var a=this.input.getLanguageDirection();this.dir!==a&&(this.dir=a,this.$node.css("direction",a),this.dropdown.setLanguageDirection(a))},_updateHint:function(){var a,b,c,d,e,f;a=this.dropdown.getDatumForTopSuggestion(),a&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(b=this.input.getInputValue(),c=l.normalizeQuery(b),d=i.escapeRegExChars(c),e=new RegExp("^(?:"+d+")(.+$)","i"),f=e.exec(a.value),f?this.input.setHint(b+f[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(a){var b,c,d,e;b=this.input.getHint(),c=this.input.getQuery(),d=a||this.input.isCursorAtEnd(),b&&c!==b&&d&&(e=this.dropdown.getDatumForTopSuggestion(),e&&this.input.setInputValue(e.value),this.eventBus.trigger("autocompleted",e.raw,e.datasetName))},_select:function(a,b){void 0!==a.value&&this.input.setQuery(a.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(a.value,!0),this._setLanguageDirection(),this.eventBus.trigger("selected",a.raw,a.datasetName,b).isDefaultPrevented()===!1&&(this.dropdown.close(),i.defer(i.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var a=this.input.getInputValue();a.length>=this.minLength?this.dropdown.update(a):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(a){a=i.toStr(a),this.isActivated?this.input.setInputValue(a):(this.input.setQuery(a),this.input.setInputValue(a,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),g(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),d.Dropdown=m,d.Input=l,d.sources=c(20),a.exports=d},function(a,b,c){"use strict";function d(a){a&&a.el||e.error("EventBus initialized without el"),this.$el=f.element(a.el)}var e=c(4),f=c(3);e.mixin(d.prototype,{trigger:function(a,b,c,d){var f=e.Event("autocomplete:"+a);return this.$el.trigger(f,[b,c,d]),f}}),a.exports=d},function(a,b,c){"use strict";function d(a){var b,c,d,f,g=this;a=a||{},a.input||i.error("input is missing"),b=i.bind(this._onBlur,this),c=i.bind(this._onFocus,this),d=i.bind(this._onKeydown,this),f=i.bind(this._onInput,this),this.$hint=j.element(a.hint),this.$input=j.element(a.input).on("blur.aa",b).on("focus.aa",c).on("keydown.aa",d),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",function(a){h[a.which||a.keyCode]||i.defer(i.bind(g._onInput,g,a))}):this.$input.on("input.aa",f),this.query=this.$input.val(),this.$overflowHelper=e(this.$input)}function e(a){return j.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:a.css("font-family"),fontSize:a.css("font-size"),fontStyle:a.css("font-style"),fontVariant:a.css("font-variant"),fontWeight:a.css("font-weight"),wordSpacing:a.css("word-spacing"),letterSpacing:a.css("letter-spacing"),textIndent:a.css("text-indent"),textRendering:a.css("text-rendering"),textTransform:a.css("text-transform")}).insertAfter(a)}function f(a,b){return d.normalizeQuery(a)===d.normalizeQuery(b)}function g(a){return a.altKey||a.ctrlKey||a.metaKey||a.shiftKey}var h;h={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=c(4),j=c(3),k=c(8);d.normalizeQuery=function(a){return(a||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(d.prototype,k,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(a){var b=h[a.which||a.keyCode];this._managePreventDefault(b,a),b&&this._shouldTrigger(b,a)&&this.trigger(b+"Keyed",a)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(a,b){var c,d,e;switch(a){case"tab":d=this.getHint(),e=this.getInputValue(),c=d&&d!==e&&!g(b);break;case"up":case"down":c=!g(b);break;default:c=!1}c&&b.preventDefault()},_shouldTrigger:function(a,b){var c;switch(a){case"tab":c=!g(b);break;default:c=!0}return c},_checkInputValue:function(){var a,b,c;a=this.getInputValue(),b=f(a,this.query),c=!(!b||!this.query)&&this.query.length!==a.length,this.query=a,b?c&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){void 0===a&&(a=this.query),this.$input.val(a),b?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(a){this.$input.attr("aria-activedescendant",a)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(a){this.$hint.val(a)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var a,b,c,d;a=this.getInputValue(),b=this.getHint(),c=a!==b&&0===b.indexOf(a),(d=""!==a&&c&&!this.hasOverflow())||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var a=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=a},isCursorAtEnd:function(){var a,b,c;return a=this.$input.val().length,b=this.$input[0].selectionStart,i.isNumber(b)?b===a:!document.selection||(c=document.selection.createRange(),c.moveStart("character",-a),a===c.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),a.exports=d},function(a,b,c){"use strict";function d(a,b,c,d){var e;if(!c)return this;for(b=b.split(l),c=d?j(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function e(a,b,c){return d.call(this,"async",a,b,c)}function f(a,b,c){return d.call(this,"sync",a,b,c)}function g(a){var b;if(!this._callbacks)return this;for(a=a.split(l);b=a.shift();)delete this._callbacks[b];return this}function h(a){var b,c,d,e,f;if(!this._callbacks)return this;for(a=a.split(l),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=i(c.sync,this,[b].concat(d)),f=i(c.async,this,[b].concat(d)),e()&&k(f);return this}function i(a,b,c){function d(){for(var d,e=0,f=a.length;!d&&e<f;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function j(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var k=c(9),l=/\s+/;a.exports={onSync:f,onAsync:e,off:g,trigger:h}},function(a,b,c){"use strict";function d(){h&&i&&(h=!1,i.length?m=i.concat(m):l=-1,m.length&&e())}function e(){if(!h){n=!1,h=!0;for(var a=m.length,b=setTimeout(d);a;){for(i=m,m=[];i&&++l<a;)i[l].run();l=-1,a=m.length}i=null,l=-1,h=!1,clearTimeout(b)}}function f(a,b){this.fun=a,this.array=b}
vendor: 5,143 bytes, line 12477
12477function g(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];m.push(new f(a,b)),n||h||(n=!0,j())}for(var h,i,j,k=[c(10),c(12),c(13),c(14),c(15)],l=-1,m=[],n=!1,o=-1,p=k.length;++o<p;)if(k[o]&&k[o].test&&k[o].test()){j=k[o].install(e);break}f.prototype.run=function(){var a=this.fun,b=this.array;switch(b.length){case 0:return a();case 1:return a(b[0]);case 2:return a(b[0],b[1]);case 3:return a(b[0],b[1],b[2]);default:return a.apply(null,b)}},a.exports=g},function(a,b,c){(function(a){"use strict";b.test=function(){return void 0!==a&&!a.browser},b.install=function(b){return function(){a.nextTick(b)}}}).call(b,c(11))},function(a,b){function c(){throw new Error("setTimeout has not been defined")}function d(){throw new Error("clearTimeout has not been defined")}function e(a){if(k===setTimeout)return setTimeout(a,0);if((k===c||!k)&&setTimeout)return k=setTimeout,setTimeout(a,0);try{return k(a,0)}catch(b){try{return k.call(null,a,0)}catch(b){return k.call(this,a,0)}}}function f(a){if(l===clearTimeout)return clearTimeout(a);if((l===d||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(a);try{return l(a)}catch(b){try{return l.call(null,a)}catch(b){return l.call(this,a)}}}function g(){p&&n&&(p=!1,n.length?o=n.concat(o):q=-1,o.length&&h())}function h(){if(!p){var a=e(g);p=!0;for(var b=o.length;b;){for(n=o,o=[];++q<b;)n&&n[q].run();q=-1,b=o.length}n=null,p=!1,f(a)}}function i(a,b){this.fun=a,this.array=b}function j(){}var k,l,m=a.exports={};!function(){try{k="function"==typeof setTimeout?setTimeout:c}catch(a){k=c}try{l="function"==typeof clearTimeout?clearTimeout:d}catch(a){l=d}}();var n,o=[],p=!1,q=-1;m.nextTick=function(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];o.push(new i(a,b)),1!==o.length||p||e(h)},i.prototype.run=function(){this.fun.apply(null,this.array)},m.title="browser",m.browser=!0,m.env={},m.argv=[],m.version="",m.versions={},m.on=j,m.addListener=j,m.once=j,m.off=j,m.removeListener=j,m.removeAllListeners=j,m.emit=j,m.binding=function(a){throw new Error("process.binding is not supported")},m.cwd=function(){return"/"},m.chdir=function(a){throw new Error("process.chdir is not supported")},m.umask=function(){return 0}},function(a,b){(function(a){"use strict";var c=a.MutationObserver||a.WebKitMutationObserver;b.test=function(){return c},b.install=function(b){var d=0,e=new c(b),f=a.document.createTextNode("");return e.observe(f,{characterData:!0}),function(){f.data=d=++d%2}}}).call(b,function(){return this}())},function(a,b){(function(a){"use strict";b.test=function(){return!a.setImmediate&&void 0!==a.MessageChannel},b.install=function(b){var c=new a.MessageChannel;return c.port1.onmessage=b,function(){c.port2.postMessage(0)}}}).call(b,function(){return this}())},function(a,b){(function(a){"use strict";b.test=function(){return"document"in a&&"onreadystatechange"in a.document.createElement("script")},b.install=function(b){return function(){var c=a.document.createElement("script");return c.onreadystatechange=function(){b(),c.onreadystatechange=null,c.parentNode.removeChild(c),c=null},a.document.documentElement.appendChild(c),b}}}).call(b,function(){return this}())},function(a,b){"use strict";b.test=function(){return!0},b.install=function(a){return function(){setTimeout(a,0)}}},function(a,b,c){"use strict";function d(a){var b,c,d,h=this;a=a||{},a.menu||f.error("menu is required"),f.isArray(a.datasets)||f.isObject(a.datasets)||f.error("1 or more datasets required"),a.datasets||f.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=a.minLength||0,this.templates={},this.appendTo=a.appendTo||!1,this.css=f.mixin({},j,a.appendTo?j.appendTo:{}),this.cssClasses=a.cssClasses=f.mixin({},j.defaultClasses,a.cssClasses||{}),this.cssClasses.prefix=a.cssClasses.formattedPrefix||f.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),b=f.bind(this._onSuggestionClick,this),c=f.bind(this._onSuggestionMouseEnter,this),d=f.bind(this._onSuggestionMouseLeave,this);var i=f.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=g.element(a.menu).on("mouseenter.aa",i,c).on("mouseleave.aa",i,d).on("click.aa",i,b),this.$container=a.appendTo?a.wrapper:this.$menu,a.templates&&a.templates.header&&(this.templates.header=f.templatify(a.templates.header),this.$menu.prepend(this.templates.header())),a.templates&&a.templates.empty&&(this.templates.empty=f.templatify(a.templates.empty),this.$empty=g.element('<div class="'+f.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=f.map(a.datasets,function(b){return e(h.$menu,b,a.cssClasses)}),f.each(this.datasets,function(a){var b=a.getRoot();b&&0===b.parent().length&&h.$menu.append(b),a.onSync("rendered",h._onRendered,h)}),a.templates&&a.templates.footer&&(this.templates.footer=f.templatify(a.templates.footer),this.$menu.append(this.templates.footer()));var k=this;g.element(window).resize(function(){k._redraw()})}function e(a,b,c){return new d.Dataset(f.mixin({$menu:a,cssClasse
vendor: 7,347 bytes, line 12477
12477s:c},b))}var f=c(4),g=c(3),h=c(8),i=c(17),j=c(19);f.mixin(d.prototype,h,{_onSuggestionClick:function(a){this.trigger("suggestionClicked",g.element(a.currentTarget))},_onSuggestionMouseEnter:function(a){var b=g.element(a.currentTarget);if(!b.hasClass(f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var c=this;setTimeout(function(){c._setCursor(b,!1)},0)}},_onSuggestionMouseLeave:function(a){if(a.relatedTarget){if(g.element(a.relatedTarget).closest("."+f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return}this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(a,b){function c(a){return a.isEmpty()}function d(a){return a.templates&&a.templates.empty}if(this.isEmpty=f.every(this.datasets,c),this.isEmpty)if(b.length>=this.minLength&&this.trigger("empty"),this.$empty)if(b.length<this.minLength)this._hide();else{var e=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(e),this.$empty.show(),this._show()}else f.any(this.datasets,d)?b.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),b.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(f.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(f.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(a,b){a.first().addClass(f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",b)},_removeCursor:function(){this._getCursor().removeClass(f.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(a){var b,c,d,e;if(this.isOpen){if(c=this._getCursor(),b=this._getSuggestions(),this._removeCursor(),d=b.index(c)+a,(d=(d+1)%(b.length+1)-1)===-1)return void this.trigger("cursorRemoved");d<-1&&(d=b.length-1),this._setCursor(e=b.eq(d),!0),this._ensureVisible(e)}},_ensureVisible:function(a){var b,c,d,e;b=a.position().top,c=b+a.height()+parseInt(a.css("margin-top"),10)+parseInt(a.css("margin-bottom"),10),d=this.$menu.scrollTop(),e=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),b<0?this.$menu.scrollTop(d+b):e<c&&this.$menu.scrollTop(d+(c-e))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(a){this.$menu.css("ltr"===a?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(a){var b=null;return a.length&&(b={raw:i.extractDatum(a),value:i.extractValue(a),datasetName:i.extractDatasetName(a)}),b},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(a){function b(b){b.update(a)}f.each(this.datasets,b)},empty:function(){function a(a){a.clear()}f.each(this.datasets,a),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){function a(a){a.destroy()}this.$menu.off(".aa"),this.$menu=null,f.each(this.datasets,a)}}),d.Dataset=i,a.exports=d},function(a,b,c){"use strict";function d(a){a=a||{},a.templates=a.templates||{},a.source||k.error("missing source"),a.name&&!g(a.name)&&k.error("invalid dataset name: "+a.name),this.query=null,this._isEmpty=!0,this.highlight=!!a.highlight,this.name=void 0===a.name||null===a.name?k.getUniqueId():a.name,this.source=a.source,this.displayFn=e(a.display||a.displayKey),this.debounce=a.debounce,this.cache=a.cache!==!1,this.templates=f(a.templates,this.displayFn),this.css=k.mixin({},n,a.appendTo?n.appendTo:{}),this.cssClasses=a.cssClasses=k.mixin({},n.defaultClasses,a.cssClasses||{}),this.cssClasses.prefix=a.cssClasses.formattedPrefix||k.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var b=k.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=a.$menu&&a.$menu.find(b+"-"+this.name).length>0?l.element(a.$menu.find(b+"-"+this.name)[0]):l.element(m.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=a.$menu,this.clearCachedSuggestions()}function e(a){function b(b){return b[a]}return a=a||"value",k.isFunction(a)?a:b}function f(a,b){function c(a){return"<p>"+b(a)+"</p>"}return{empty:a.empty&&k.templatify(a.empty),header:a.header&&k.templatify(a.header),footer:a.footer&&k.templatify(a.footer),suggestion:a.suggestion||c}}function g(a){return/^[_a-zA-Z0-9-]+$/.test(a)}var h="aaDataset",i="aaValue",j="aaDatum",k=c(4),l=c(3),m=c(18),n=c(19),o=c(8);d.extractDatasetName=function(a){return l.element(a).data(h)},d.extractValue=function(a){return l.element(a).data(i)},d.extractDatum=function(a){var b=l.element(a).data(j);return"string"==typeof b&&(b=JSON.parse(b)),b},k.mixin(d.prototype,o,{_render:function(a,b){function c(){var b=[].slice.call(arguments,0);return b=[{query:a,isEmpty:!0}].concat(b),n.templates.empty.apply(this,b)}function d(){function a(a){var b,c=m.suggestion.replace("%PREFIX%",f.cssClasses.prefix).replace("%SUGGESTION%",f.cssClasses.suggestion);return b=l.element(c).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(n.templates.suggestion.apply(this,[a].concat(e))),b.data(h,n.name),b.data(i,n.displayFn(a)||void 0),b.data(j,JSON.stringify(a)),b.children().each(function(){l.element(this).css(f.css.suggestionChild)}),b}var c,d,e=[].slice.call(arguments,0),f=this,g=m.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return c=l.element(g).css(this.css.suggestions),d=k.map(b,a),c.append.apply(c,d),c}function e(){var b=[].slice.call(arguments,0);return b=[{query:a,isEmpty:!g}].concat(b),n.templates.header.apply(this,b)}function f(){var b=[].slice.call(arguments,0);return b=[{query:a,isEmpty:!g}].concat(b),n.templates.footer.apply(this,b)}if(this.$el){var g,n=this,o=[].slice.call(arguments,2);if(this.$el.empty(),g=b&&b.length,this._isEmpty=!g,!g&&this.templates.empty)this.$el.html(c.apply(this,o)).prepend(n.templates.header?e.apply(this,o):null).append(n.templates.footer?f.apply(this,o):null);else if(g)this.$el.html(d.apply(this,o)).prepend(n.templates.header?e.apply(this,o):null).append(n.templates.footer?f.apply(this,o):null);else if(b&&!Array.isArray(b))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(g?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(g?"without":"with")+"-"+this.name),this.trigger("rendered",a)}},getRoot:function(){return this.$el},
vendor: 3,212 bytes, line 12477
12477update:function(a){function b(b){if(!this.canceled&&a===this.query){var c=[].slice.call(arguments,1);this.cacheSuggestions(a,b,c),this._render.apply(this,[a,b].concat(c))}}if(this.query=a,this.canceled=!1,this.shouldFetchFromCache(a))b.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var c=this,d=function(){c.canceled||c.source(a,b.bind(c))};if(this.debounce){var e=function(){c.debounceTimeout=null,d()};clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout(e,this.debounce)}else d()}},cacheSuggestions:function(a,b,c){this.cachedQuery=a,this.cachedSuggestions=b,this.cachedRenderExtraArgs=c},shouldFetchFromCache:function(a){return this.cache&&this.cachedQuery===a&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),a.exports=d},function(a,b){"use strict";a.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},function(a,b,c){"use strict";var d=c(4),e={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};d.isMsie()&&d.mixin(e.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),d.isMsie()&&d.isMsie()<=7&&d.mixin(e.input,{marginTop:"-1px"}),a.exports=e},function(a,b,c){"use strict";a.exports={hits:c(21),popularIn:c(24)}},function(a,b,c){"use strict";var d=c(4),e=c(22),f=c(23);a.exports=function(a,b){function c(c,e){a.search(c,b,function(a,b){if(a)return void d.error(a.message);e(b.hits,b)})}var g=f(a.as._ua);return g&&g[0]>=3&&g[1]>20&&(b=b||{},b.additionalUA="autocomplete.js "+e),c}},function(a,b){a.exports="0.36.0"},function(a,b){"use strict";a.exports=function(a){var b=a.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(b)return[b[1],b[2],b[3]]}},function(a,b,c){"use strict";var d=c(4),e=c(22),f=c(23);a.exports=function(a,b,c,g){function h(h,i){a.search(h,b,function(a,h){
12477if(a)return void d.error(a.message);if(h.hits.length>0){var l=h.hits[0],m=d.mixin({hitsPerPage:0},c);delete m.source,delete m.index;var n=f(k.as._ua);return n&&n[0]>=3&&n[1]>20&&(b.additionalUA="autocomplete.js "+e),void k.search(j(l),m,function(a,b){if(a)return void d.error(a.message);var c=[];if(g.includeAll){var e=g.allTitle||"All departments";c.push(d.mixin({facet:{value:e,count:b.nbHits}},d.cloneDeep(l)))}d.each(b.facets,function(a,b){d.each(a,function(a,e){c.push(d.mixin({facet:{facet:b,value:e,count:a}},d.cloneDeep(l)))})});for(var f=1;f<h.hits.length;++f)c.push(h.hits[f]);i(c,h)})}i([])})}var i=f(a.as._ua);if(i&&i[0]>=3&&i[1]>20&&(b=b||{},b.additionalUA="autocomplete.js "+e),!c.source)return d.error("Missing 'source' key");var j=d.isFunction(c.source)?c.source:function(a){return a[c.source]};if(!c.index)return d.error("Missing 'index' key");var k=c.index;return g=g||{},h}}])});
12478/*! InstantSearch.js 4.43.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch.js */
12479!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).instantsearch=t()}(this,function(){"use strict";function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function C(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function E(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(){return(h=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function W(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach(function(e){k(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function L(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}function a(e){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function n(e,t){return(n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function j(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],0<=t.indexOf(n)||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],0<=t.indexOf(n)||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function M(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function O(r){var i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}();return function(){var e,t=a(r);if(i){var n=a(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return function(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?M(e):t}(this,e)}}function D(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,a=void 0;try{for(var s,o=e[Symbol.iterator]();!(r=(s=o.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||null==o.return||o.return()}finally{if(i)throw a}}return n}(e,t)||s(e,t)||function(){throw new TypeError("Invalid attempt to de
12479structure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||s(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function c(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function u(e,t){if(e===t)return e;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&"__proto__"!==n){var r=t[n],i=e[n];void 0!==i&&void 0===r||(c(i)&&c(r)?e[n]=u(i,r):e[n]="object"==typeof(a=r)&&null!==a?u(Array.isArray(a)?[]:{},a):a)}var a;return e}var m=function(e){c(e)||(e={});for(var t=1,n=arguments.length;t<n;t++){var r=arguments[t];c(r)&&u(e,r)}return e},p=function(){return Array.prototype.slice.call(arguments).reduceRight(function(t,n){return Object.keys(Object(n)).forEach(function(e){void 0!==n[e]&&(void 0!==t[e]&&delete t[e],t[e]=n[e])}),t},{})};var l=function(n,r){return n.filter(function(e,t){return-1<r.indexOf(e)&&n.indexOf(e)===t})},g=function(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++)if(t(e[n]))return e[n]};var d=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")};var v=function(e,t){if(null===e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],0<=t.indexOf(n)||(i[n]=e[n]);return i};var y=function(e){return e&&0<Object.keys(e).length},t=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)},b={addRefinement:function(e,t,n){if(b.isRefined(e,t,n))return e;var r=""+n,i=e[t]?e[t].concat(r):[r],a={};return a[t]=i,p({},a,e)},removeRefinement:function(e,n,t){if(void 0===t)return b.clearRefinement(e,function(e,t){return n===t});var r=""+t;return b.clearRefinement(e,function(e,t){return n===t&&r===e})},toggleRefinement:function(e,t,n){if(void 0===n)throw new Error("toggleRefinement should be used with a value");return b.isRefined(e,t,n)?b.removeRefinement(e,t,n):b.addRefinement(e,t,n)},clearRefinement:function(i,a,s){if(void 0===a)return y(i)?{}:i;if("string"==typeof a)return v(i,[a]);if("function"==typeof a){var o=!1,e=Object.keys(i).reduce(function(e,t){var n=i[t]||[],r=n.filter(function(e){return!a(e,t,s)});return r.length!==n.length&&(o=!0),e[t]=r,e},{});return o?e:i}},isRefined:function(e,t,n){var r=!!e[t]&&0<e[t].length;if(void 0===n||!r)return r;var i=""+n;return-1!==e[t].indexOf(i)}},S=b;function R(e,n){return Array.isArray(e)&&Array.isArray(n)?e.length===n.length&&e.every(function(e,t){return R(n[t],e)}):e===n}function w(e){var r=e?w._parseNumbers(e):{};void 0===r.userToken||t(r.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n  - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=r.facets||[],this.disjunctiveFacets=r.disjunctiveFacets||[],this.hierarchicalFacets=r.hierarchicalFacets||[],this.facetsRefinements=r.facetsRefinements||{},this.facetsExcludes=r.facetsExcludes||{},this.disjunctiveFacetsRefinements=r.disjunctiveFacetsRefinements||{},this.numericRefinements=r.numericRefinements||{},this.tagRefinements=r.tagRefinements||[],this.hierarchicalFacetsRefinements=r.hierarchicalFacetsRefinements||{};var i=this;Object.keys(r).forEach(function(e){var t=-1!==w.PARAMETERS.indexOf(e),n=void 0!==r[e];!t&&n&&(i[e]=r[e])})}w.PARAMETERS=Object.keys(new w),w._parseNumbers=function(i){if(i instanceof w)return i;var r={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroun
12479dRadius","hitsPerPage","minProximity"].forEach(function(e){var t=i[e];if("string"==typeof t){var n=parseFloat(t);r[e]=isNaN(n)?t:n}}),Array.isArray(i.insideBoundingBox)&&(r.insideBoundingBox=i.insideBoundingBox.map(function(e){return Array.isArray(e)?e.map(function(e){return parseFloat(e)}):e})),i.numericRefinements){var a={};Object.keys(i.numericRefinements).forEach(function(n){var r=i.numericRefinements[n]||{};a[n]={},Object.keys(r).forEach(function(e){var t=r[e].map(function(e){return Array.isArray(e)?e.map(function(e){return"string"==typeof e?parseFloat(e):e}):"string"==typeof e?parseFloat(e):e});a[n][e]=t})}),r.numericRefinements=a}return m({},i,r)},w.make=function(e){var n=new w(e);return(e.hierarchicalFacets||[]).forEach(function(e){if(e.rootPath){var t=n.getHierarchicalRefinement(e.name);0<t.length&&0!==t[0].indexOf(e.rootPath)&&(n=n.clearRefinements(e.name)),0===(t=n.getHierarchicalRefinement(e.name)).length&&(n=n.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}}),n},w.validate=function(e,t){var n=t||{};return e.tagFilters&&n.tagRefinements&&0<n.tagRefinements.length?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):0<e.tagRefinements.length&&n.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&n.numericRefinements&&y(n.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):y(e.numericRefinements)&&n.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},w.prototype={constructor:w,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:S.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:S.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:S.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:S.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,n){var r=d(n);if(this.isNumericRefined(e,t,r))return this;var i=m({},this.numericRefinements);return i[e]=m({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(r)):i[e][t]=[r],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(n,r,i){return void 0!==i?this.isNumericRefined(n,r,i)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements(function(e,t){return t===n&&e.op===r&&R(e.val,d(i))})}):this:void 0!==r?this.isNumericRefined(n,r)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements(function(e,t){return t===n&&e.op===r})}):this:this.isNumericRefined(n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements(function(e,t){return t===n})}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(s){if(void 0===s)return y(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof s)return v(this.numericRefinements,[s]);if("function"==typeof s){var o=!1,t=this.numericRefinements,e=Object.keys(t).reduce(function(e,r){var i=t[r],a={};return i=i||{}
vendor: 23,200 bytes, line 12479
12479,Object.keys(i).forEach(function(t){var e=i[t]||[],n=[];e.forEach(function(e){s({val:e,op:t},r,"numeric")||n.push(e)}),n.length!==e.length&&(o=!0),a[t]=n}),e[r]=a,e},{});return o?e:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:S.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:S.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return S.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:S.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(t){return this.isConjunctiveFacet(t)?this.clearRefinements(t).setQueryParameters({facets:this.facets.filter(function(e){return e!==t})}):this},removeDisjunctiveFacet:function(t){return this.isDisjunctiveFacet(t)?this.clearRefinements(t).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter(function(e){return e!==t})}):this},removeHierarchicalFacet:function(t){return this.isHierarchicalFacet(t)?this.clearRefinements(t).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter(function(e){return e.name!==t})}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:S.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return S.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:S.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return S.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:S.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(t){if(!this.isTagRefined(t))return this;var e={tagRefinements:this.tagRefinements.filter(function(e){return e!==t})};return this.setQueryParameters(e)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:S.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:S.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:S.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var n=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),r={};return void 0!==this.hierarchicalFacetsRefinements[e]&&0<this.hierarchicalFacetsRefinements[e].length&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+n))?-1===t.indexOf(n)?r[e]=[]:r[e]=[t.slice(0,t.lastIndexOf(n))]:r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:p({},r,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var n={};return n[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:p({},n,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:p({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return-1<this.disjunctiveFacets.indexOf(e)},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return-1<this.facets.indexOf(e)},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&S.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&S.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&S.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var n=this.getHierarchicalRefinement(e);return t?-1!==n.indexOf(t):0<n.length},isNumericRefined:function(e,t,n){if(void 0===n&&void 0===t)return!!this.numericRefinements[e];var r=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===n||!r)return r;var i=d(n),a=void 0!==function(e,t){return g(e,function(e){return R(e,t)})}(this.numericRefinements[e][t],i);return r&&a},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var t=this,e=l(Object.keys(this.numericRefinements).filter(function(e){return 0<Object.keys(t.numericRefinements[e]).length}),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter(function(e){return 0<t.disjunctiveFacetsRefinements[e].length}).concat(e).concat(this.getRefinedHierarchicalFacets())},getRefinedHierarchicalFacets:function(){var t=this;return l(this.hierarchicalFacets.map(function(e){return e.name}),Object.keys(this.hierarchicalFacetsRefinements).filter(function(e){return 0<t.hierarchicalFacetsRefinements[e].length}))},getUnrefinedDisjunctiveFacets:function(){var t=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter(function(e){return-1===t.indexOf(e)})},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var n=this.managedParameters,r={},i=this;return Object.keys(this).forEach(function(e){var t=i[e];-1===n.indexOf(e)&&void 0!==t&&(r[e]=t)}),r},setQueryParameter:function(e,t){if(this[e]===t)return this;var n={};return n[e]=t,this.setQueryParameters(n)},setQueryParameters:function(e){if(!e)return this;var t=w.validate(this,e);if(t)throw t;var n=this,i=w._parseNumbers(e),r=Object.keys(this).reduce(function(e,t){return e[t]=n[t],e},{}),a=Object.keys(i).reduce(function(e,t){var n=void 0!==e[t],r=void 0!==i[t];return n&&!r?v(e,[t]):(r&&(e[t]=i[t]),e)},r);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(t){return g(this.hierarchicalFacets,function(e){return e.name===t})},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var n=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(n).map(function(e){return e.trim()})},toString:function(){return JSON.stringify(this,null,2)}};var _=w;function x(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=void 0!==t,a=null===t;if(!a&&t<e||r&&i||!n)return 1;if(!r&&e<t||a&&n||!i)return-1}return 0}function N(e){return Array.isArray(e)?e.filter(Boolean):[]}function I(e,t){if(!Array.isArray(e))return-1;for(var n=0;n<e.length;n++)if(t(e[n]))return n;return-1}function F(e,t){var i=(t||[]).map(function(e){return e.split(":")});return e.reduce(function(e,t){var n=t.split(":"),r=g(i,function(e){return e[0]===n[0]});return 1<n.length||!r?(e[0].push(n[0]),e[1].push(n[1])):(e[0].push(r[0]),e[1].push(r[1])),e},[[],[]])}var T=function(e,n,i){if(!Array.isArray(e))return[];Array.isArray(i)||(i=[]);var t=e.map(function(t,e){return{criteria:n.map(function(e){return t[e]}),index:e,value:t}});return t.sort(function(e,t){for(var n=-1;++n<e.criteria.length;){var r=x(e.criteria[n],t.criteria[n]);if(r)return n>=i.length?r:"desc"===i[n]?-r:r}return e.index-t.index}),t.map(function(e){return e.value})};var e=function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},A=function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")},H=function(d){return function(e,t){var n=d.hierarchicalFacets[t],r=d.hierarchicalFacetsRefinements[n.name]&&d.hierarchicalFacetsRefinements[n.name][0]||"",i=d._getHierarchicalFacetSeparator(n),a=d._getHierarchicalRootPath(n),s=d._getHierarchicalShowParentLevel(n),o=F(d._getHierarchicalFacetSortBy(n)),c=e.every(function(e){return e.exhaustive}),u=function(o,c,u,l,d){return function(e,n,t){var r=e;if(0<t){var i=0;for(r=e;i<t;){var a=r&&Array.isArray(r.data)?r.data:[];r=g(a,function(e){return e.isRefined}),i++}}if(r){var s=Object.keys(n.data).map(function(e){return[e,n.data[e]]}).filter(function(e){return function(e,t,n,r,i,a){return(!i||0===e.indexOf(i)&&i!==e)&&(!i&&-1===e.indexOf(r)||i&&e.split(r).length-i.split(r).length==1||-1===e.indexOf(r)&&-1===n.indexOf(r)||0===n.indexOf(e)||0===e.indexOf(t+r)&&(a||0===e.indexOf(n)))}(e[0],r.path||u,d,c,u,l)});r.data=T(s.map(function(e){var t=e[0];return function(e,t,n,r,i){var a=t.split(n);return{name:a[a.length-1].trim(),path:t,escapedValue:B(t),count:e,isRefined:r===t||0===r.indexOf(t+n),exhaustive:i,data:null}}(e[1],t,c,U(d),n.exhaustive)}),o[0],o[1])}return e}}(o,i,a,s,r),l=e;return a&&(l=e.slice(a.split(i).length)),l.reduce(u,{name:d.hierarchicalFacets[t].name,count:null,isRefined:!0,path:null,escapedValue:null,exhaustive:c,data:null})}},B=e,U=A;var q=e,Q=A;function V(e){var n={};return e.forEach(function(e,t){n[e]=t}),n}function $(e,t,n){t&&t[n]&&(e.stats=t[n])}function K(l,t,n){var c=t[0];this._rawResults=t;var d=this;Object.keys(c).forEach(function(e){d[e]=c[e]}),Object.keys(n||{}).forEach(function(e){d[e]=n[e]}),this.processingTimeMS=t.reduce(function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS},0),this.disjunctiveFacets=[],this.hierarchicalFacets=l.hierarchicalFacets.map(function(){return[]}),this.facets=[];var e=l.getRefinedDisjunctiveFacets(),u=V(l.facets),h=V(l.disjunctiveFacets),r=1,f=c.facets||{};Object.keys(f).forEach(function(e){var t=f[e],n=function(e,t){return g(e,function(e){return-1<(e.attributes||[]).indexOf(t)})}(l.hierarchicalFacets,e);if(n){var r=n.attributes.indexOf(e),i=I(l.hierarchicalFacets,function(e){return e.name===n.name});d.hierarchicalFacets[i][r]={attribute:e,data:t,exhaustive:c.exhaustiveFacetsCount}}else{var a,s=-1!==l.disjunctiveFacets.indexOf(e),o=-1!==l.facets.indexOf(e);s&&(a=h[e],d.disjunctiveFacets[a]={name:e,data:t,exhaustive:c.exhaustiveFacetsCount},$(d.disjunctiveFacets[a],c.facets_stats,e)),o&&(a=u[e],d.facets[a]={name:e,data:t,exhaustive:c.exhaustiveFacetsCount},$(d.facets[a],c.facets_stats,e))}}),this.hierarchicalFacets=N(this.hierarchicalFacets),e.forEach(function(e){var a=t[r],s=a&&a.facets?a.facets:{},o=l.getHierarchicalFacetByName(e);Object.keys(s).forEach(function(t){var n,e=s[t];if(o){n=I(l.hierarchicalFacets,function(e){return e.name===o.name});var r=I(d.hierarchicalFacets[n],function(e){return e.attribute===t});if(-1===r)return;d.hierarchicalFacets[n][r].data=m({},d.hierarchicalFacets[n][r].data,e)}else{n=h[t];var i=c.facets&&c.facets[t]||{};d.disjunctiveFacets[n]={name:t,data:p({},e,i),exhaustive:a.exhaustiveFacetsCount},$(d.disjunctiveFacets[n],a.facets_stats,t),l.disjunctiveFacetsRefinements[t]&&l.disjunctiveFacetsRefinements[t].forEach(function(e){!d.disjunctiveFacets[n].data[e]&&-1<l.disjunctiveFacetsRefinements[t].indexOf(Q(e))&&(d.disjunctiveFacets[n].data[e]=0)})}}),r++}),l.getRefinedHierarchicalFacets().forEach(function(e){var o=l.getHierarchicalFacetByName(e),c=l._getHierarchicalFacetSeparator(o),u=l.getHierarchicalRefinement(e);0===u.length||u[0].split(c).length<2||t.slice(r).forEach(function(e){var s=e&&e.facets?e.facets:{};Object.keys(s).forEach(function(t){var e=s[t],n=I(l.hierarchicalFacets,function(e){return e.name===o.name}),r=I(d.hierarchicalFacets[n],function(e){return e.attribute===t});if(-1!==r){var i={};if(0<u.length){var a=u[0].split(c)[0];i[a]=d.hierarchicalFacets[n][r].data[a]}d.hierarchicalFacets[n][r].data=p(i,e,d.hierarchicalFacets[n][r].data)}}),r++})}),Object.keys(l.facetsExcludes).forEach(function(t){var e=l.facetsExcludes[t],n=u[t];d.facets[n]={name:t,data:c.facets[t],exhaustive:c.exhaustiveFacetsCount},e.forEach(function(e){d.facets[n]=d.facets[n]||{name:t},d.facets[n].data=d.facets[n].data||{},d.facets[n].data[e]=0})}),this.hierarchicalFacets=this.hierarchicalFacets.map(H(l)),this.facets=N(this.facets),this.disjunctiveFacets=N(this.disjunctiveFacets),this._state=l}function z(e,t){var n=g(e,function(e){return e.name===t});return n&&n.stats}function J(e,t,n,r,i){var a=g(i,function(e){return e.name===n}),s=a&&a.data&&a.data[r]?a.data[r]:0,o=a&&a.exhaustive||!1;return{type:t,attributeName:n,name:r,count:s,exhaustive:o}}K.prototype.getFacetByName=function(t){function e(e){return e.name===t}return g(this.facets,e)||g(this.disjunctiveFacets,e)||g(this.hierarchicalFacets,e)},K.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],K.prototype.getFacetValues=function(e,t){var n=function(n,r){function e(e){return e.name===r}if(n._state.isConjunctiveFacet(r)){var i=g(n.facets,e);return i?Object.keys(i.data).map(function(e){var t=q(e);return{name:e,escapedValue:t,count:i.data[e],isRefined:n._state.isFacetRefined(r,t),isExcluded:n._state.isExcludeRefined(r,e)}}):[]}if(n._state.isDisjunctiveFacet(r)){var a=g(n.disjunctiveFacets,e);return a?Object.keys(a.data).map(function(e){var t=q(e);return{name:e,escapedValue:t,count:a.data[e],isRefined:n._state.isDisjunctiveFacetRefined(r,t)}}):[]}if(n._state.isHierarchicalFacet(r))return g(n.hierarchicalFacets,e)}(this,e);if(n){var r,i=p({},t,{sortBy:K.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),a=this;if(Array.isArray(n))r=[e];else r=a._state.getHierarchicalFacetByName(n.name).attributes;return function t(n,e,r,i){if(i=i||0,Array.isArray(e))return n(e,r[i]);if(!e.data||0===e.data.length)return e;var a=e.data.map(function(e){return t(n,e,r,i+1)}),s=n(a,r[i]);return p({data:s},e)}(function(e,t){if(i.facetOrdering){var n=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(a,t);if(Boolean(n))return function(e,t){var n=[],r=[],i=(t.order||[]).reduce(function(e,t,n){return e[t]=n,e},{});e.forEach(function(e){var t=e.path||e.name;void 0!==i[t]?n[i[t]]=e:r.push(e)}),n=n.filter(function(e){return e});var a,s=t.sortRemainingBy;return"hidden"===s?n:(a="alpha"===s?[["path","name"],["asc","asc"]]:[["count"],["desc"]],n.concat(T(r,a[0],a[1])))}(e,n)}if(Array.isArray(i.sortBy)){var r=F(i.sortBy,K.DEFAULT_SORT);return T(e,r[0],r[1])}if("function"==typeof i.sortBy)return function(e,t){return t.sort(e)}(i.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")},n,r)}},K.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?z(this.facets,e):this._state.isDisjunctiveFacet(e)?z(this.disjunctiveFacets,e):void 0},K.prototype.getRefinements=function(){var r=this._state,n=this,i=[];return Object.keys(r.facetsRefinements).forEach(function(t){r.facetsRefinements[t].forEach(function(e){i.push(J(r,"facet",t,e,n.facets))})}),Object.keys(r.facetsExcludes).forEach(function(t){r.facetsExcludes[t].forEach(function(e){i.push(J(r,"exclude",t,e,n.facets))})}),Object.keys(r.disjunctiveFacetsRefinements).forEach(function(t){r.disjunctiveFacetsRefinements[t].forEach(function(e){i.push(J(r,"disjunctive",t,e,n.disjunctiveFacets))})}),Object.keys(r.hierarchicalFacetsRefinements).forEach(function(t){r.hierarchicalFacetsRefinements[t].forEach(function(e){i.push(function(e,t,n,r){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),s=n.split(a),o=g(r,function(e){return e.name===t}),c=s.reduce(function(e,t){var n=e&&g(e.data,function(e){return e.name===t});return void 0!==n?n:e},o),u=c&&c.count||0,l=c&&c.exhaustive||!1,d=c&&c.path||"";return{type:"hierarchical",attributeName:t,name:d,count:u,exhaustive:l}}(r,t,e,n.hierarchicalFacets))})}),Object.keys(r.numericRefinements).forEach(function(n){var e=r.numericRefinements[n];Object.keys(e).forEach(function(t){e[t].forEach(function(e){i.push({type:"numeric",attributeName:n,name:e,numericValue:e,operator:t})})})}),r.tagRefinements.forEach(function(e){i.push({type:"tag",attributeName:"_tags",name:e})}),i};var Y=K;function X(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}var G=X;function Z(e){return"function"==typeof e}function ee(e){return"object"==typeof e&&null!==e}function te(e){return void 0===e}X.prototype._events=void 0,X.prototype._maxListeners=void 0,X.defaultMaxListeners=10,X.prototype.setMaxListeners=function(e){if(!function(e){return"number"==typeof e}(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},X.prototype.emit=function(e){var t,n,r,i,a,s;if(this._events||(this._events={}),"error"===e&&(!this._events.error||ee(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var o=new Error('Uncaught, unspecified "error" event. ('+t+")");throw o.context=t,o}if(te(n=this._events[e]))return!1;if(Z(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:i=Array.prototype.slice.call(arguments,1),n.apply(this,i)}else if(ee(n))for(i=Array.prototype.slice.call(arguments,1),r=(s=n.slice()).length,a=0;a<r;a++)s[a].apply(this,i);return!0},X.prototype.on=X.prototype.addListener=function(e,t){var n;if(!Z(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,Z(t.listener)?t.listener:t),this._events[e]?ee(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,ee(this._events[e])&&!this._events[e].warned&&(n=te(this._maxListeners)?X.defaultMaxListeners:this._maxListeners)&&0<n&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},X.prototype.once=function(e,t){if(!Z(t))throw TypeError("listener must be a function");var n=!1;function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}return r.listener=t,this.on(e,r),this},X.prototype.removeListener=function(e,t){var n,r,i,a;if(!Z(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(i=(n=this._events[e]).length,r=-1,n===t||Z(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(ee(n)){for(a=i;0<a--;)if(n[a]===t||n[a].listener&&n[a].listener===t){r=a;break}if(r<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},X.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(Z(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},X.prototype.listeners=function(e){return this._events&&this._events[e]?Z(this._events[e])?[this._events[e]]:this._events[e].slice():[]},X.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(Z(t))return 1;if(t)return t.length}return 0},X.listenerCount=function(e,t){return e.listenerCount(t)};var ne=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})};function re(e,t){this.main=e,this.fn=t,this.lastResults=null}ne(re,G),re.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},re.prototype.getModifiedState=function(e){return this.fn(e)};var ie=re;function ae(n){return Object.keys(n).sort(function(e,t){return e.localeCompare(t)}).reduce(function(e,t){return e[t]=n[t],e},{})}var se={_getQueries:function(s,o){var c=[];return c.push({indexName:s,params:se._getHitsSearchParams(o)}
12479),o.getRefinedDisjunctiveFacets().forEach(function(e){c.push({indexName:s,params:se._getDisjunctiveFacetSearchParams(o,e)})}),o.getRefinedHierarchicalFacets().forEach(function(e){var r=o.getHierarchicalFacetByName(e),t=o.getHierarchicalRefinement(e),i=o._getHierarchicalFacetSeparator(r);if(0<t.length&&1<t[0].split(i).length){var a=t[0].split(i).slice(0,-1).reduce(function(e,t,n){return e.concat({attribute:r.attributes[n],value:0===n?t:[e[e.length-1].value,t].join(i)})},[]);a.forEach(function(e,t){var n=se._getDisjunctiveFacetSearchParams(o,e.attribute,0===t),r=a[t-1];n.facetFilters=0<t?[r.attribute+":"+r.value]:void 0,c.push({indexName:s,params:n})})}}),c},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(se._getHitsHierarchicalFacetsAttributes(e)),n=se._getFacetFilters(e),r=se._getNumericFilters(e),i=se._getTagFilters(e),a={facets:-1<t.indexOf("*")?["*"]:t,tagFilters:i};return 0<n.length&&(a.facetFilters=n),0<r.length&&(a.numericFilters=r),ae(m({},e.getQueryParams(),a))},_getDisjunctiveFacetSearchParams:function(e,t,n){var r=se._getFacetFilters(e,t,n),i=se._getNumericFilters(e,t),a=se._getTagFilters(e),s={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};0<a.length&&(s.tagFilters=a);var o=e.getHierarchicalFacetByName(t);return s.facets=o?se._getDisjunctiveHierarchicalFacetAttribute(e,o,n):t,0<i.length&&(s.numericFilters=i),0<r.length&&(s.facetFilters=r),ae(m({},e.getQueryParams(),s))},_getNumericFilters:function(e,i){if(e.numericFilters)return e.numericFilters;var a=[];return Object.keys(e.numericRefinements).forEach(function(r){var t=e.numericRefinements[r]||{};Object.keys(t).forEach(function(n){var e=t[n]||[];
vendor: 9,518 bytes, line 12479
12479i!==r&&e.forEach(function(e){if(Array.isArray(e)){var t=e.map(function(e){return r+n+e});a.push(t)}else a.push(r+n+e)})})}),a},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(o,c,u){var l=[],e=o.facetsRefinements||{};Object.keys(e).forEach(function(t){(e[t]||[]).forEach(function(e){l.push(t+":"+e)})});var n=o.facetsExcludes||{};Object.keys(n).forEach(function(t){(n[t]||[]).forEach(function(e){l.push(t+":-"+e)})});var r=o.disjunctiveFacetsRefinements||{};Object.keys(r).forEach(function(t){var e=r[t]||[];if(t!==c&&e&&0!==e.length){var n=[];e.forEach(function(e){n.push(t+":"+e)}),l.push(n)}});var d=o.hierarchicalFacetsRefinements||{};return Object.keys(d).forEach(function(e){var t=(d[e]||[])[0];if(void 0!==t){var n,r,i=o.getHierarchicalFacetByName(e),a=o._getHierarchicalFacetSeparator(i),s=o._getHierarchicalRootPath(i);if(c===e){if(-1===t.indexOf(a)||!s&&!0===u||s&&s.split(a).length===t.split(a).length)return;t=s?(r=s.split(a).length-1,s):(r=t.split(a).length-2,t.slice(0,t.lastIndexOf(a))),n=i.attributes[r]}else r=t.split(a).length-1,n=i.attributes[r];n&&l.push([n+":"+t])}}),l},_getHitsHierarchicalFacetsAttributes:function(s){return s.hierarchicalFacets.reduce(function(e,t){var n=s.getHierarchicalRefinement(t.name)[0];if(!n)return e.push(t.attributes[0]),e;var r=s._getHierarchicalFacetSeparator(t),i=n.split(r).length,a=t.attributes.slice(0,i+1);return e.concat(a)},[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,n){var r=e._getHierarchicalFacetSeparator(t);if(!0===n){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(r).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(r).length-1;return t.attributes.slice(0,1+s)},getSearchForFacetQuery:function(e,t,n,r){var i=r.isDisjunctiveFacet(e)?r.clearRefinements(e):r,a={facetQuery:t,facetName:e};return"number"==typeof n&&(a.maxFacetHits=n),ae(m({},se._getHitsSearchParams(i),a))}},oe=se,ce="3.10.0",ue=e;function le(e,t,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper (3.10.0)"),this.setClient(e);var r=n||{};r.index=t,this.state=_.make(r),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function de(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function he(){return this.state.page}ne(le,G),le.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},le.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},le.prototype.getQuery=function(){var e=this.state;return oe._getHitsSearchParams(e)},le.prototype.searchOnce=function(e,t){var n=e?this.state.setQueryParameters(e):this.state,r=oe._getQueries(n.index,n),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:n}),!t)return this.client.search(r).then(function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new Y(n,e.results),state:n,_originalResponse:e}},function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e});this.client.search(r).then(function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new Y(n,e.results),n)}).catch(function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,n)})},le.prototype.findAnswers=function(e){var t=this.state,n=this.derivedHelpers[0];if(!n)return Promise.resolve([]);var r=n.getModifiedState(t),i=m({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:v(oe._getHitsSearchParams(r),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var s=this.client.initIndex(r.index);if("function"!=typeof s.findAnswers)throw new Error(a);return s.findAnswers(r.query,e.queryLanguages,i)},le.prototype.searchForFacetValues=function(t,e,n,r){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var s=this.state.setQueryParameters(r||{}),o=s.isDisjunctiveFacet(t),c=oe.getSearchForFacetQuery(t,e,n,s);this._currentNbQueries++;var u,l=this;return u=i?this.client.searchForFacetValues([{indexName:s.index,params:c}]):a?this.client.initIndex(s.index).searchForFacetValues(c):(delete c.facetName,this.client.search([{type:"facet",facet:t,indexName:s.index,params:c}]).then(function(e){return e.results[0]})),this.emit("searchForFacetValues",{state:s,facet:t,query:e}),u.then(function(e){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(e=Array.isArray(e)?e[0]:e).facetHits.forEach(function(e){e.escapedValue=ue(e.value),e.isRefined=o?s.isDisjunctiveFacetRefined(t,e.escapedValue):s.isFacetRefined(t,e.escapedValue)}),e},function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e})},le.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},le.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},le.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},le.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},le.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.addNumericRefinement=function(e,t,n){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,n),isPageReset:!0}),this},le.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},le.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},le.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},le.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},le.prototype.removeNumericRefinement=function(e,t,n){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,n),isPageReset:!0}),this},le.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},le.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},le.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},le.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},le.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},le.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},le.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},le.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},le.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},le.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},le.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},le.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},le.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},le.prototype.setCurrentPage=de,le.prototype.setPage=de,le.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},le.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},le.prototype.setState=function(e){return this._change({state:_.make(e),isPageReset:!1}),this},le.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new _(e),this}
12479,le.prototype.hasRefinements=function(e){return!!y(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},le.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},le.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},le.prototype.hasTag=function(e){return this.state.isTagRefined(e)},le.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},le.prototype.getIndex=function(){return this.state.index},le.prototype.getCurrentPage=he,le.prototype.getPage=he,le.prototype.getTags=function(){return this.state.tagRefinements},le.prototype.getRefinements=function(e){var n=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach(function(e){n.push({value:e,type:"conjunctive"})}),this.state.getExcludeRefinements(e).forEach(function(e){n.push({value:e,type:"exclude"})});else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach(function(e){n.push({value:e,type:"disjunctive"})})}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach(function(e){var t=r[e];n.push({value:t,operator:e,type:"numeric"})}),n},le.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},le.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},le.prototype._search=function(e){var r=this.state,i=[],t=[];e.onlyWithDerivedHelpers||(t=oe._getQueries(r.index,r),i.push({state:r,queriesCount:t.length,helper:this}),this.emit("search",{state:r,results:this.lastResults}));var n=this.derivedHelpers.map(function(e){var t=e.getModifiedState(r),n=oe._getQueries(t.index,t);return i.push({state:t,queriesCount:n.length,helper:e}),e.emit("search",{state:t,results:e.lastResults}),n}),a=Array.prototype.concat.apply(t,n),s=this._queryId++;this._currentNbQueries++;try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,i,s)).catch(this._dispatchAlgoliaError.bind(this,s))}catch(e){this.emit("error",{error:e})}},le.prototype._dispatchAlgoliaResponse=function(e,t,n){if(!(t<this._lastQueryIdReceived)){this._currentNbQueries-=t-this._lastQueryIdReceived,this._lastQueryIdReceived=t,0===this._currentNbQueries&&this.emit("searchQueueEmpty");var s=n.results.slice();e.forEach(function(e){var t=e.state,n=e.queriesCount,r=e.helper,i=s.splice(0,n),a=r.lastResults=new Y(t,i);r.emit("result",{results:a,state:t})})}},le.prototype._dispatchAlgoliaError=function(e,t){e<this._lastQueryIdReceived||(this._currentNbQueries-=e-this._lastQueryIdReceived,this._lastQueryIdReceived=e,this.emit("error",{error:t}),0===this._currentNbQueries&&this.emit("searchQueueEmpty"))},le.prototype.containsRefinement=function(e,t,n,r){return e||0!==t.length||0!==n.length||0!==r.length},le.prototype._hasDisjunctiveRefinements=function(e){return this.state.disjunctiveRefinements[e]&&0<this.state.disjunctiveRefinements[e].length},le.prototype._change=function(e){var t=e.state,n=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:n}))},le.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},le.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper (3.10.0)"),this.client=e),this},le.prototype.getClient=function(){return this.client},le.prototype.derive=function(e){var t=new ie(this,e);return this.derivedHelpers.push(t),t},le.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},le.prototype.hasPendingRequests=function(){return 0<this._currentNbQueries};var fe=le;function me(e,t,n){return new fe(e,t,n)}me.version=ce,me.AlgoliaSearchHelper=fe,me.SearchParameters=_,me.SearchResults=Y;var pe=me;function ge(r){function e(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];null===i&&(i=ve.then(function(){i=null,a?a=!1:r.apply(void 0,t)}))}var i=null,a=!1;return e.wait=function(){if(null===i)throw new Error("The deferred function should be called before calling `wait()`");return i},e.cancel=function(){null!==i&&(a=!0)},e}var ve=Promise.resolve();function ye(e){var t="string"==typeof e,n=t?document.querySelector(e):e;if(function(e){return e instanceof HTMLElement||Boolean(e)&&0<e.nodeType}(n))return n;
vendor: 8,713 bytes, line 12479
12479var r="Container must be `string` or `HTMLElement`.";throw t&&(r+=" Unable to find ".concat(e)),new Error(r)}function be(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function Se(e){return e.filter(function(e,t,n){return n.indexOf(e)===t})}function Re(e){var t=e.defaultTemplates,n=e.templates;return W({templatesConfig:e.templatesConfig},function(a,e){var s=1<arguments.length&&void 0!==e?e:{};return Se([].concat(P(Object.keys(a||{})),P(Object.keys(s)))).reduce(function(e,t){var n=a?a[t]:void 0,r=s[t],i=void 0!==r&&r!==n;return e.templates[t]=i?r:n,e.useCustomCompileOptions[t]=i,e},{templates:{},useCustomCompileOptions:{}})}(t,n))}function we(e,t){return e(t={exports:{}},t.exports),t.exports}var _e=we(function(e,t){!function(S){var R=/\S/,t=/\"/g,n=/\n/g,r=/\r/g,i=/\\/g,a=/\u2028/,s=/\u2029/;function w(e){"}"===e.n.substr(e.n.length-1)&&(e.n=e.n.substring(0,e.n.length-1))}function _(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function P(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var r=1,i=e.length;r<i;r++)if(t.charAt(n+r)!=e.charAt(r))return!1;return!0}S.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},S.scan=function(e,t){var n,r,i,a,s,o=e.length,c=0,u=null,l=null,d="",h=[],f=!1,m=0,p=0,g="{{",v="}}";function y(){0<d.length&&(h.push({tag:"_t",text:new String(d)}),d="")}function b(e,t){if(y(),e&&function(){for(var e=!0,t=p;t<h.length;t++)if(!(e=S.tags[h[t].tag]<S.tags._v||"_t"==h[t].tag&&null===h[t].text.match(R)))return!1;return e}())for(var n,r=p;r<h.length;r++)h[r].text&&((n=h[r+1])&&">"==n.tag&&(n.indent=h[r].text.toString()),h.splice(r,1));else t||h.push({tag:"\n"});f=!1,p=h.length}for(t&&(t=t.split(" "),g=t[0],v=t[1]),m=0;m<o;m++)0==c?P(g,e,m)?(--m,y(),c=1):"\n"==e.charAt(m)?b(f):d+=e.charAt(m):1==c?(m+=g.length-1,c="="==(u=(l=S.tags[e.charAt(m+1)])?e.charAt(m+1):"_v")?(r=m,void 0,i="="+v,a=(n=e).indexOf(i,r),s=_(n.substring(n.indexOf("=",r)+1,a)).split(" "),g=s[0],v=s[s.length-1],m=a+i.length-1,0):(l&&m++,2),f=m):P(v,e,m)?(h.push({tag:u,n:_(d),otag:g,ctag:v,i:"/"==u?f-g.length:m+v.length}),d="",m+=v.length-1,c=0,"{"==u&&("}}"==v?m++:w(h[h.length-1]))):d+=e.charAt(m);return b(f,!0),h};var u={_t:!0,"\n":!0,$:!0,"/":!0};function l(e,t){for(var n=0,r=t.length;n<r;n++)if(t[n].o==e.n)return e.tag="#",!0}function d(e,t,n){for(var r=0,i=n.length;r<i;r++)if(n[r].c==e&&n[r].o==t)return!0}function o(e){var t=[];for(var n in e.partials)t.push('"'+h(n)+'":{name:"'+h(e.partials[n].name)+'", '+o(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+h(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}S.stringify=function(e,t,n){return"{code: function (c,p,i) { "+S.wrapMain(e.code)+" },"+o(e)+"}"};var c=0;function h(e){return e.replace(i,"\\\\").replace(t,'\\"').replace(n,"\\n").replace(r,"\\r").replace(a,"\\u2028").replace(s,"\\u2029")}function f(e){return~e.indexOf(".")?"d":"f"}function m(e,t){var n="<"+(t.prefix||"")+e.n+c++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+h(n)+'",c,p,"'+(e.indent||"")+'"));',n}function e(e,t){t.code+="t.b(t.t(t."+f(e.n)+'("'+h(e.n)+'",c,p,0)));'}function p(e){return"t.b("+e+");"}S.generate=function(e,t,n){c=0;var r={code:"",subs:{},partials:{}};return S.walk(e,r),n.asString?this.stringify(r,t,n):this.makeTemplate(r,t,n)},S.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},S.template=S.Template,S.makeTemplate=function(e,t,n){var r=this.makePartials(e);return r.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(r,t,this,n)},S.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},S.codegen={"#":function(e,t){t.code+="if(t.s(t."+f(e.n)+'("'+h(e.n)+'",c,p,1),c,p,0,'+e.i+","+e.end+',"'+e.otag+" "+e.ctag+'")){t.rs(c,p,function(c,p,t){',S.walk(e.nodes,t),t.code+="});c.pop();}"},"^":function(e,t){t.code+="if(!t.s(t."+f(e.n)+'("'+h(e.n)+'",c,p,1),c,p,1,0,0,"")){',S.walk(e.nodes,t),t.code+="};"},">":m,"<":function(e,t){var n={partials:{},code:"",subs:{},inPartial:!0};S.walk(e.nodes,n);var r=t.partials[m(e,t)];r.subs=n.subs,r.partials=n.partials},$:function(e,t){var n={subs:{},code:"",partials:t.partials,prefix:e.n};S.walk(e.nodes,n),t.subs[e.n]=n.code,t.inPartial||(t.code+='t.sub("'+h(e.n)+'",c,p,i);')},"\n":function(e,t){t.code+=p('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+f(e.n)+'("'+h(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=p('"'+h(e.text)+'"')},"{":e,"&":e},S.walk=function(e,t){for(var n,r=0,i=e.length;r<i;r++)(n=S.codegen[e[r].tag])&&n(e[r],t);return t},S.parse=function(e,t,n){return function e(t,n,r,i){var a,s=[],o=null,c=null;for(a=r[r.length-1];0<t.length;){if(c=t.shift(),a&&"<"==a.tag&&!(c.tag in u))throw new Error("Illegal content in < super tag.");if(S.tags[c.tag]<=S.tags.$||l(c,i))r.push(c),c.nodes=e(t,c.tag,r,i);else{if("/"==c.tag){if(0===r.length)throw new Error("Closing tag without opener: /"+c.n);if(o=r.pop(),c.n!=o.n&&!d(c.n,o.n,i))throw new Error("Nesting error: "+o.n+" vs. "+c.n);return o.end=c.i,s}"\n"==c.tag&&(c.last=0==t.length||"\n"==t[0].tag)}s.push(c)}if(0<r.length)throw new Error("missing closing tag: "+r.pop().n);return s}(e,0,[],(n=n||{}).sectionTags||[])},S.cache={},S.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},S.compile=function(e,t){t=t||{};var n=S.cacheKey(e,t),r=this.cache[n];if(r){var i=r.partials;for(var a in i)delete i[a].instance;return r}return r=this.generate(this.parse(this.scan(e,t.delimiters),e,t),e,t),this.cache[n]=r}}(t)}),Pe=we(function(e,t){!function(e){function l(e,t,n){var r;return t&&"object"==typeof t&&(void 0!==t[e]?r=t[e]:n&&t.get&&"function"==typeof t.get&&(r=t.get(e))),r}e.Template=function(e,t,n,r){e=e||{},this.r=e.code||this.r,this.c=n,this.options=r||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=o(e),s.test(e)?e.replace(t,"&amp;").replace(n,"&lt;").replace(r,"&gt;").replace(i,"&#39;").replace(a,"&quot;"):e},t:o,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],r=t[n.name];if(n.instance&&n.base==r)return n.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[e].base=r,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);r=function(e,t,n,r,i,a){function s(){}function o(){}var c;o.prototype=(s.prototype=e).subs;var u=new s;for(c in u.subs=new o,u.subsText={},u.buf="",r=r||{},u.stackSubs=r,u.subsText=a,t)r[c]||(r[c]=t[c]);for(c in r)u.subs[c]=r[c];for(c in i=i||{},u.stackPartials=i,n)i[c]||(i[c]=n[c]);for(c in i)u.partials[c]=i[c];return u}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=r},rp:function(e,t,n,r){var i=this.ep(e,n);return i?i.ri(t,n,r):""},rs:function(e,t,n){var r=e[e.length-1];if(d(r))for(var i=0;i<r.length;i++)e.push(r[i]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,r,i,a,s){var o;return(!d(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,r,i,a,s)),o=!!e,!r&&o&&t&&t.push("object"==typeof e?e:t[t.length-1]),o)},d:function(e,t,n,r){var i,a=e.split("."),s=this.f(a[0],t,n,r),o=this.options.modelGet,c=null;if("."===e&&d(t[t.length-2]))s=t[t.length-1];else for(var u=1;u<a.length;u++)s=void 0!==(i=l(a[u],s,o))?(c=s,i):"";return!(r&&!s)&&(r||"function"!=typeof s||(t.push(c),s=this.mv(s,t,n),t.pop()),s)},f:function(e,t,n,r){for(var i=!1,a=!1,s=this.options.modelGet,o=t.length-1;0<=o;o--)if(void 0!==(i=l(e,t[o],s))){a=!0;break}return a?(r||"function"!=typeof i||(i=this.mv(i,t,n)),i):!r&&""},ls:function(e,t,n,r,i){var a=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(o(e.call(t,r)),t,n)),this.options.delimiters=a,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,r,i,a,s){var o,c=t[t.length-1],u=e.call(c);return"function"==typeof u?!!r||(o=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(u,c,n,o.substring(i,a),s)):u},mv:function(e,t,n){var r=t[t.length-1],i=e.call(r);
12479return"function"==typeof i?this.ct(o(i.call(r)),r,n):i},sub:function(e,t,n,r){var i=this.subs[e];i&&(this.activeSub=e,i(t,n,this,r),this.activeSub=!1)}};var t=/&/g,n=/</g,r=/>/g,i=/\'/g,a=/\"/g,s=/[&<>\"\']/;function o(e){return String(null==e?"":e)}var d=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)});_e.Template=Pe.Template,_e.template=_e.Template;var xe=_e;function Ne(e){var t=e.templates,n=e.templateKey,r=e.compileOptions,i=e.helpers,a=e.data,s=e.bindEvent,o=t[n];if("string"!=typeof o&&"function"!=typeof o)throw new Error("Template must be 'string' or 'function', was '".concat(f(o),"' (key: ").concat(n,")"));if("function"==typeof o)return o(a,s);var c=function(e,t,n){var r=0<arguments.length&&void 0!==e?e:{},i=1<arguments.length?t:void 0,a=2<arguments.length?n:void 0;return Object.keys(r).reduce(function(e,n){return W(W({},e),{},k({},n,function(){var t=this;return function(e){return r[n].call(a,e,function(e){return xe.compile(e,i).render(t)})}}))},{})}(i,r,a);return xe.compile(o,r).render(W(W({},a),{},{helpers:c})).replace(/[ \n\r\t\f\xA0]+/g,function(e){return e.replace(/(^|\xA0+)[^\xA0]+/g,"$1 ")}).trim()}function Ie(e,t){for(var n,r=0;r<e.length;r++)if(t(n=e[r],r,e))return n}function Fe(e){return"number"==typeof e&&e<0||"string"==typeof e?String(e).replace(/^-/,"\\-"):e}function Te(i,e,a,s,t){var o,n=4<arguments.length&&void 0!==t?t:[],r={type:e,attribute:a,name:s,escapedValue:Fe(s)},c=Ie(n,function(e){return e.name===a});return"hierarchical"===e?function(){for(var e=i.getHierarchicalFacetByName(a),n=s.split(e.separator),t=function(t){c=c&&c.data&&Ie(Object.keys(c.data).map(function(t){return function(e){return t[e]}}(c.data)),function(e){return e.name===n[t]})},r=0;void 0!==c&&r<n.length;++r)t(r);o=c&&c.count}():o=c&&c.data&&c.data[r.name],void 0!==o&&(r.count=o),c&&void 0!==c.exhaustive&&(r.exhaustive=c.exhaustive),r}function Ce(n,r,e){var t=2<arguments.length&&void 0!==e&&e,a=[],i=r.facetsRefinements,s=void 0===i?{}:i,o=r.facetsExcludes,c=void 0===o?{}:o,u=r.disjunctiveFacetsRefinements,l=void 0===u?{}:u,d=r.hierarchicalFacetsRefinements,h=void 0===d?{}:d,f=r.numericRefinements,m=void 0===f?{}:f,p=r.tagRefinements,g=void 0===p?[]:p;return Object.keys(s).forEach(function(t){s[t].forEach(function(e){a.push(Te(r,"facet",t,e,n.facets))})}),Object.keys(c).forEach(function(t){c[t].forEach(function(e){a.push({type:"exclude",attribute:t,name:e,exclude:!0})})}),Object.keys(l).forEach(function(t){l[t].forEach(function(e){a.push(Te(r,"disjunctive",t,function(e){return"string"==typeof e?e.replace(/^\\-/,"-"):e}(e),n.disjunctiveFacets))})}),Object.keys(h).forEach(function(t){h[t].forEach(function(e){a.push(Te(r,"hierarchical",t,e,n.hierarchicalFacets))})}),Object.keys(m).forEach(function(r){var i=m[r];
12479Object.keys(i).forEach(function(e){var t=e,n=i[t];(Array.isArray(n)?n:[n]).forEach(function(e){a.push({type:"numeric",attribute:r,name:"".concat(e),numericValue:e,operator:t})})})}),g.forEach(function(e){a.push({type:"tag",attribute:"_tags",name:e})}),t&&r.query&&r.query.trim()&&a.push({attribute:"query",type:"query",name:r.query,query:r.query}),a}function Ee(e){var t=e.helper,n=e.attributesToClear,r=void 0===n?[]:n,i=t.state.setPage(0);return i=r.reduce(function(e,t){return i.isNumericRefined(t)?e.removeNumericRefinement(t):i.isHierarchicalFacet(t)?e.removeHierarchicalFacetRefinement(t):i.isDisjunctiveFacet(t)?e.removeDisjunctiveFacetRefinement(t):i.isConjunctiveFacet(t)?e.removeFacetRefinement(t):e},i),-1!==r.indexOf("query")&&(i=i.setQuery("")),i}function ke(e,t){if(void 0===e||"function"!=typeof e)throw new Error("The render function is not valid (received type ".concat(function(e){return Object.prototype.toString.call(e).slice(8,-1)}(e),").\n\n").concat(t))}function Le(){}function je(e,t){return e}function Me(e,t){return(Array.isArray(t)?t:t.split(".")).reduce(function(e,t){return e&&e[t]},e)}function Oe(e){return"number"==typeof e&&isFinite(e)}function Ae(e){if(!function(e){return"object"===f(e)&&null!==e}(e)||"[object Object]"!==function(e){return null===e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}(e))return!1;if(null===Object.getPrototypeOf(e))return!0;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function He(e){var t=e.start,n=void 0===t?0:t,r=e.end,i=e.step,a=void 0===i?1:i,s=0===a?1:a,o=Math.round((r-n)/s);return P(Array(o)).map(function(e,t){return n+t*s})}function We(e){return e!==Object(e)}function De(e,t){if(e===t)return!0;if(We(e)||We(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var i=r[n];if(!(i in t))return!1;if(!De(e[i],t[i]))return!1}return!0}var Be={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Ue=/[&<>"']/g,qe=RegExp(Ue.source);var Qe={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},Ve=/&(amp|quot|lt|gt|#39);/g,$e=RegExp(Ve.source);var Ke={highlightPreTag:"__ais-highlight__",highlightPostTag:"__/ais-highlight__"},ze={highlightPreTag:"<mark>",highlightPostTag:"</mark>"};function Je(e){return function(e){return e&&qe.test(e)?e.replace(Ue,function(e){return Be[e]}):e}(e).replace(new RegExp(Ke.highlightPreTag,"g"),ze.highlightPreTag).replace(new RegExp(Ke.highlightPostTag,"g"),ze.highlightPostTag)}function Ye(n){return Ae(n)&&"string"!=typeof n.value?Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,Ye(n[t])))},{}):Array.isArray(n)?n.map(Ye):W(W({},n),{},{value:Je(n.value)})}function Xe(e){return void 0===e.__escaped&&((e=e.map(function(e){var t=h({},e);return t._highlightResult&&(t._highlightResult=Ye(t._highlightResult)),t._snippetResult&&(t._snippetResult=Ye(t._snippetResult)),t})).__escaped=!0),e}function Ge(e){var t=ze.highlightPreTag,n=ze.highlightPostTag;return e.map(function(e){return e.isHighlighted?t+e.value+n:e.value}).join("")}function Ze(e){var n=ze.highlightPostTag,t=ze.highlightPreTag,r=e.split(t),i=r.shift(),a=i?[{value:i,isHighlighted:!1}]:[];return r.forEach(function(e){var t=e.split(n);a.push({value:t[0],isHighlighted:!0}),""!==t[1]&&a.push({value:t[1],isHighlighted:!1})}),a}var et=new RegExp(/\w/i);function tt(e,t){var n,r,i=e[t],a=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,s=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return et.test(function(e){return e&&$e.test(e)?e.replace(Ve,function(e){return Qe[e]}):e}(i.value))||s!==a?i.isHighlighted:s}function nt(n){return n.some(function(e){return e.isHighlighted})?n.map(function(e,t){return W(W({},e),{},{isHighlighted:!tt(n,t)})}):n.map(function(e){return W(W({},e),{},{isHighlighted:!1})})}function rt(e,t){return e.setQueryParameters({hierarchicalFacets:t.hierarchicalFacets.reduce(function(e,t){var n=function(e,t){if(!Array.isArray(e))return-1;for(var n=0;n<e.length;n++)if(t(e[n]))return n;return-1}(e,function(e){return e.name===t.name});if(-1===n)return e.concat(t);var r=e.slice();return r.splice(n,1,t),r},e.hierarchicalFacets)})}function it(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce(function(e,t){var n=function(e,t){return e.setQueryParameters({hierarchicalFacetsRefinements:W(W({},e.hierarchicalFacetsRefinements),t.hierarchicalFacetsRefinements)})}(e,t);return function(e,t){t.facets,t.disjunctiveFacets,t.facetsRefinements,t.facetsExcludes,t.disjunctiveFacetsRefinements,t.numericRefinements,t.tagRefinements,t.hierarchicalFacets,t.hierarchicalFacetsRefinements,t.ruleContexts;var n=j(t,["facets","disjunctiveFacets","facetsRefinements","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacets","hierarchicalFacetsRefinements","ruleContexts"]);return e.setQueryParameters(n)}(function(e,t){return t.facets.reduce(function(e,t){return e.addFacet(t)},e)}(function(e,t){var n=Se([].concat(e.ruleContexts).concat(t.ruleContexts).filter(
12479Boolean));return 0<n.length?e.setQueryParameters({ruleContexts:n}):e}(function(e,t){return t.disjunctiveFacets.reduce(function(e,t){return e.addDisjunctiveFacet(t)},e)}(function(e,t){return e.setQueryParameters({facetsRefinements:W(W({},e.facetsRefinements),t.facetsRefinements)})}(function(e,t){return e.setQueryParameters({facetsExcludes:W(W({},e.facetsExcludes),t.facetsExcludes)})}(function(e,t){return e.setQueryParameters({disjunctiveFacetsRefinements:W(W({},e.disjunctiveFacetsRefinements),t.disjunctiveFacetsRefinements)})}(function(e,t){return e.setQueryParameters({numericRefinements:W(W({},e.numericRefinements),t.numericRefinements)})}(function(e,t){return t.tagRefinements.reduce(function(e,t){return e.addTagRefinement(t)},e)}(rt(n,t),t),t),t),t),t),t),t),t),t)})}function at(e){return Array.isArray(e)?e:[e]}function st(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.map(function(e){return function(e){var t=e.name,n=e.connector;return["https://www.algolia.com/doc/api-reference/widgets/",t,"/js/",void 0!==n&&n?"#connector":""].join("")}(e)}).join(", ");return function(e){return[e,"See documentation: ".concat(r)].filter(Boolean).join("\n\n")}}var ot=/^(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)$/;function ct(e){return Array.isArray(e)?function(e){var t=D(e,1)[0],n=D(t=void 0===t?[void 0,void 0,void 0,void 0]:t,4),r=n[0],i=n[1],a=n[2],s=n[3];if(!(r&&i&&a&&s))throw new Error('Invalid value for "insideBoundingBox" parameter: ['.concat(e,"]"));return{northEast:{lat:r,lng:i},southWest:{lat:a,lng:s}}}(e):function(e){var t=D(e.split(",").map(parseFloat),4),n=t[0],r=t[1],i=t[2],a=t[3];if(!(n&&r&&i&&a))throw new Error('Invalid value for "insideBoundingBox" parameter: "'.concat(e,'"'));return{northEast:{lat:n,lng:r},southWest:{lat:i,lng:a}}}(e)}function ut(e,n,r){return e.map(function(e,t){return W(W({},e),{},{__position:r*n+t+1})})}function lt(e,t){return t?e.map(function(e){return W(W({},e),{},{__queryID:t})}):e}function dt(e){var o=e.instantSearchInstance,c=e.helper,u=e.attribute,l=e.widgetType;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;1===t.length&&"object"===f(t[0])?o.sendEventToInsights(t[0]):"click"!==r||2!==t.length&&3!==t.length||function(e,t,n){return e.state.isHierarchicalFacet(t)?e.state.isHierarchicalFacetRefined(t,n):e.state.isConjunctiveFacet(t)?e.state.isFacetRefined(t,n):e.state.isDisjunctiveFacetRefined(t,n)}(c,u,i)||o.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:l,eventType:r,payload:{eventName:s,index:c.getIndex(),filters:["".concat(u,":").concat(i)]},attribute:u})}}function ht(e){return btoa(encodeURIComponent(JSON.stringify(e)))}function ft(e){return JSON.parse(decodeURIComponent(atob(e)))}function mt(e){var n=e.index,r=e.widgetType,t=(e.methodName,e.args),i=e.isSearchStalled;if(1===t.length&&"object"===f(t[0]))return[t[0]];var a=t[0],s=t[1],o=t[2];if(!s)return[];if(("click"===a||"conversion"===a)&&!o)return[];var c=Array.isArray(s)?function(e){return e.slice()}(s):[s];if(0===c.length)return[];var u=c[0].__queryID,l=function(e,t){for(var n=1<arguments.length&&void 0!==t?t:20,r=[],i=0;i<Math.ceil(e.length/n);i++)r.push(e.slice(i*n,(i+1)*n));return r}(c),d=l.map(function(e){return e.map(function(e){return e.objectID})}),h=l.map(function(e){return e.map(function(e){return e.__position})});return"view"===a?i?[]:l.map(function(e,t){return{insightsMethod:"viewedObjectIDs",widgetType:r,eventType:a,payload:{eventName:o||"Hits Viewed",index:n,objectIDs:d[t]},hits:e}}):"click"===a?l.map(function(e,t){return{insightsMethod:"clickedObjectIDsAfterSearch",widgetType:r,eventType:a,payload:{eventName:o,index:n,queryID:u,objectIDs:d[t],positions:h[t]},hits:e}}):"conversion"===a?l.map(function(e,t){return{insightsMethod:"convertedObjectIDsAfterSearch",widgetType:r,eventType:a,payload:{eventName:o,index:n,queryID:u,objectIDs:d[t]},hits:e}}):[]}function pt(e){var r=e.instantSearchInstance,i=e.index,a=e.widgetType;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];mt({widgetType:a,index:i,methodName:"sendEvent",args:t,isSearchStalled:r._isSearchStalled}
12479).forEach(function(e){return r.sendEventToInsights(e)})}}function gt(e){var i=e.index,a=e.widgetType;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=mt({widgetType:a,index:i,methodName:"bindEvent",args:t,isSearchStalled:!1});return r.length?"data-insights-event=".concat(ht(r)):""}}function vt(e,n){if(!e)return null;var r=e.numericRefinements[n],i=[];return Object.keys(r).filter(function(e){return Array.isArray(r[e])&&0<r[e].length}).forEach(function(t){r[t].forEach(function(e){i.push("".concat(n).concat(t).concat(e))})}),i}function yt(r,i){var a=null;return function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return new Promise(function(e,t){a&&clearTimeout(a),a=setTimeout(function(){a=null,Promise.resolve(r.apply(void 0,n)).then(e).catch(t)},i)})}}function bt(e,t){var n,r=null===(n=e.getWidgetRenderState)||void 0===n?void 0:n.call(e,t),i=null;if(r&&r.widgetParams){var a=r.widgetParams;a.attribute?i=a.attribute:Array.isArray(a.attributes)&&(i=a.attributes[0])}if("string"!=typeof i)throw new Error("Could not find the attribute of the widget:\n\n".concat(JSON.stringify(e),"\n\nPlease check whether the widget's getWidgetRenderState returns widgetParams.attribute correctly."));return i}function St(e,t){var n=(1<arguments.length&&void 0!==t?t:{fallback:function(){}}).fallback;return"undefined"==typeof window?n():e({window:window})}var Rt=st({name:"index-widget"});function wt(e){return"ais.index"===e.$$type}function _t(e,t){var n=t.state,r=t.isPageReset,i=t._uiState;n!==e.state&&(e.state=n,e.emit("change",{state:e.state,results:e.lastResults,isPageReset:r,_uiState:i}))}function Pt(e,n,t){var r=2<arguments.length&&void 0!==t?t:{};return e.reduce(function(e,t){return wt(t)?e:t.getWidgetUiState||t.getWidgetState?t.getWidgetUiState?t.getWidgetUiState(e,n):t.getWidgetState(e,n):e},r)}function xt(e,t){var n=t.initialSearchParameters,r=j(t,["initialSearchParameters"]);return e.filter(function(e){return!wt(e)}).reduce(function(e,t){return t.getWidgetSearchParameters?t.getWidgetSearchParameters(e,r):e},n)}function Nt(e){if(void 0===e||void 0===e.indexName)throw new Error(Rt("The `indexName` option is required."));var l=e.indexName,t=e.indexId,d=void 0===t?l:t,h=[],f={},m=null,p=null,g=null,v=null;return{$$type:"ais.index",$$widgetType:"ais.index",getIndexName:function(){return l},getIndexId:function(){return d},getHelper:function(){return g},getResults:function(){return v&&v.lastResults},getScopedResults:function(){var e=this.getParent();return function n(e){return e.filter(wt).reduce(function(e,t){return e.concat.apply(e,[{indexId:t.getIndexId(),results:t.getResults(),helper:t.getHelper()}].concat(P(n(t.getWidgets()))))},[])}(e?e.getWidgets():[this])},getParent:function(){return p},createURL:function(e){return m._createURL(k({},d,Pt(h,{searchParameters:e,helper:g})))},getWidgets:function(){return h},addWidgets:function(e){var t=this;if(!Array.isArray(e))throw new Error(Rt("The `addWidgets` method expects an array of widgets."));if(e.some(function(e){return"function"!=typeof e.init&&"function"!=typeof e.render}))throw new Error(Rt("The widget definition expects a `render` and/or an `init` method."));return h=h.concat(e),m&&Boolean(e.length)&&(_t(g,{state:xt(h,{uiState:f,initialSearchParameters:g.state}),_uiState:f}),e.forEach(function(e){e.getRenderState&&It({renderState:e.getRenderState(m.renderState[t.getIndexId()]||{},{uiState:m._initialUiState,helper:t.getHelper(),parent:t,instantSearchInstance:m,state:g.state,renderState:m.renderState,templatesConfig:m.templatesConfig,createURL:t.createURL,scopedResults:[],searchMetadata:{isSearchStalled:m._isSearchStalled}}),instantSearchInstance:m,parent:t})}),e.forEach(function(e){e.init&&e.init({helper:g,parent:t,uiState:m._initialUiState,instantSearchInstance:m,state:g.state,renderState:m.renderState,templatesConfig:m.templatesConfig,createURL:t.createURL,scopedResults:[],searchMetadata:{isSearchStalled:m._isSearchStalled}})}),m.scheduleSearch()),this},removeWidgets:function(t){var n=this;if(!Array.isArray(t))throw new Error(Rt("The `removeWidgets` method expects an array of widgets."));if(t.some(function(e){return"function"!=typeof e.dispose}))throw new Error(Rt("The widget definition expects a `dispose` method."));if(h=h.filter(function(e){return-1===t.indexOf(e)}),m&&Boolean(t.length)){var e=t.reduce(function(e,t){return t.dispose({helper:g,state:e,parent:n})||e},g.state);f=Pt(h,{searchParameters:e,helper:g}),g.setState(xt(h,{uiState:f,initialSearchParameters:e})),h.length&&m.scheduleSearch()}return this},init:function(e){var t,n=this,r=e.instantSearchInstance,i=e.parent,a=e.uiState;if(null===g){m=r,p=i,f=a[d]||{};var s=r.mainHelper,o=xt(h,{uiState:f,initialSearchParameters:new pe.SearchParameters({index:l})});(g=pe({},o.index,o)).search=function(){return r.onStateChange?(r.onStateChange({uiState:r.mainIndex.getWidgetUiState({}),setUiState:r.setUiState.bind(r)}),s):s.search()},g.searchWithoutTriggeringOnStateChange=function(){return s.search()},g.searchForFacetValues=function(e,t,n,r){var i=g.state.setQueryParameters(r);return s.searchForFacetValues(e,t,n,i)},v=s.derive(function(){return it.apply(void 0,P(function(e){for(var t=e.getParent(),n=[e.getHelper().state];null!==t;)n=[t.getHelper().state].concat(n),t=t.getParent();return n}(n)))});var c=null===(t=r._initialResults)||void 0===t?void 0:t[this.getIndexId()];if(c){var u=new pe.SearchResults(new pe.SearchParameters(c.state),c.results);v.lastResults=u,g.lastResults=u}g.on("change",function(e){e.isPageReset&&!function n(e){var t=e.filter(wt);0!==t.length&&t.forEach(function(e){var t=e.getHelper();_t(t,{state:t.state.resetPage(),isPageReset:!0}),n(e.getWidgets())})}(h)}),v.on("search",function(){r.scheduleStalledRender()}),v.on("result",function(e){var t=e.results;r.scheduleRender(),g.lastResults=t}
12479),h.forEach(function(e){e.getRenderState&&It({renderState:e.getRenderState(r.renderState[n.getIndexId()]||{},{uiState:a,helper:g,parent:n,instantSearchInstance:r,state:g.state,renderState:r.renderState,templatesConfig:r.templatesConfig,createURL:n.createURL,scopedResults:[],searchMetadata:{isSearchStalled:r._isSearchStalled}}),instantSearchInstance:r,parent:n})}),h.forEach(function(e){e.init&&e.init({uiState:a,helper:g,parent:n,instantSearchInstance:r,state:g.state,renderState:r.renderState,templatesConfig:r.templatesConfig,createURL:n.createURL,scopedResults:[],searchMetadata:{isSearchStalled:r._isSearchStalled}})}),g.on("change",function(e){var t=e.state,n=e._uiState;f=Pt(h,{searchParameters:t,helper:g},n||{}),r.onStateChange||r.onInternalStateChange()}),c&&r.scheduleRender()}},render:function(e){var t=this,n=e.instantSearchInstance;this.getResults()&&(h.forEach(function(e){e.getRenderState&&It({renderState:e.getRenderState(n.renderState[t.getIndexId()]||{},{helper:t.getHelper(),parent:t,instantSearchInstance:n,results:t.getResults(),scopedResults:t.getScopedResults(),state:t.getResults()._state,renderState:n.renderState,templatesConfig:n.templatesConfig,createURL:t.createURL,searchMetadata:{isSearchStalled:n._isSearchStalled}}),instantSearchInstance:n,parent:t})}),h.forEach(function(e){e.render&&e.render({helper:g,parent:t,instantSearchInstance:n,results:t.getResults(),scopedResults:t.getScopedResults(),state:t.getResults()._state,renderState:n.renderState,templatesConfig:n.templatesConfig,createURL:t.createURL,searchMetadata:{isSearchStalled:n._isSearchStalled}})}))},dispose:function(){var t=this;h.forEach(function(e){e.dispose&&e.dispose({helper:g,state:g.state,parent:t})}),p=m=null,g.removeAllListeners(),g=null,v.detach(),v=null},getWidgetUiState:function(e){return h.filter(wt).reduce(function(e,t){return t.getWidgetUiState(e)},W(W({},e),{},k({},this.getIndexId(),f)))},getWidgetState:function(e){return this.getWidgetUiState(e)},getWidgetSearchParameters:function(e,t){var n=t.uiState;return xt(h,{uiState:n,initialSearchParameters:e})},refreshUiState:function(){f=Pt(h,{searchParameters:this.getHelper().state,helper:this.getHelper()},f)}}}function It(e){var t=e.renderState,n=e.instantSearchInstance,r=e.parent,i=r?r.getIndexId():n.mainIndex.getIndexId();n.renderState=W(W({},n.renderState),{},k({},i,W(W({},n.renderState[i]),t)))}function Ft(a){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=e.descendantName,n=e.modifierName,r=t?"-".concat(t):"",i=n?"--".concat(n):"";return"".concat("ais","-").concat(a).concat(r).concat(i)}}var Tt=Ft("Highlight");function Ct(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._highlightResult,t)||{}).value,c=void 0===o?"":o,u=Tt({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");return c.replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}var Et=Ft("ReverseHighlight");function kt(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._highlightResult,t)||{}).value,c=void 0===o?"":o,u=Et({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");return Ge(nt(Ze(c))).replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}var Lt=Ft("Snippet");function jt(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._snippetResult,t)||{}).value,c=void 0===o?"":o,u=Lt({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");return c.replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}var Mt=Ft("ReverseSnippet");function Ot(e){var t=e.attribute,n=e.highlightedTagName,r=void 0===n?"mark":n,i=e.hit,a=e.cssClasses,s=void 0===a?{}:a,o=(Me(i._snippetResult,t)||{}).value,c=void 0===o?"":o,u=Mt({descendantName:"highlighted"})+(s.highlighted?" ".concat(s.highlighted):"");
12479return Ge(nt(Ze(c))).replace(new RegExp(ze.highlightPreTag,"g"),"<".concat(r,' class="').concat(u,'">')).replace(new RegExp(ze.highlightPostTag,"g"),"</".concat(r,">"))}function At(e,t){return function(e){var t,n=e.method,r=e.payload;if("object"!==f(r))throw new Error("The insights helper expects the payload to be an object.");try{t=ht(r)}catch(e){throw new Error("Could not JSON serialize the payload object.")}return'data-insights-method="'.concat(n,'" data-insights-payload="').concat(t,'"')}({method:e,payload:t})}function Ht(){return function(e){for(var t="".concat(e,"="),n=document.cookie.split(";"),r=0;r<n.length;r++){for(var i=n[r];" "===i.charAt(0);)i=i.substring(1);if(0===i.indexOf(t))return i.substring(t.length,i.length)}}("_ALGOLIA")}function Wt(e){e.configure;return j(e,["configure"])}function Dt(){return{stateToRoute:function(n){return Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,Wt(n[t])))},{})},routeToState:function(e){var n=0<arguments.length&&void 0!==e?e:{};return Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,Wt(n[t])))},{})}}}function Bt(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n}function Ut(e,t){an.apply(e,rn(t)?t:[t])}function qt(e,t,n,r,i,a,s,o,c,u,l,d,h,f){var m=e;if("function"==typeof s?m=s(t,m):m instanceof Date?m=u(m):"comma"===n&&rn(m)&&(m=en.maybeMap(m,function(e){return e instanceof Date?u(e):e})),null===m){if(r)return a&&!h?a(t,cn.encoder,f,"key",l):t;m=""}if(function(e){return"string"==typeof e||"number"==typeof e||"boolean"==typeof e||"symbol"==typeof e||"bigint"==typeof e}(m)||en.isBuffer(m))return a?[d(h?t:a(t,cn.encoder,f,"key",l))+"="+d(a(m,cn.encoder,f,"value",l))]:[d(t)+"="+d(String(m))];var p,g=[];if(void 0===m)return g;if("comma"===n&&rn(m))p=[{value:0<m.length?m.join(",")||null:void 0}];else if(rn(s))p=s;else{var v=Object.keys(m);p=o?v.sort(o):v}for(var y=0;y<p.length;++y){var b=p[y],S="object"==typeof b&&void 0!==b.value?b.value:m[b];if(!i||null!==S){var R=rn(m)?"function"==typeof n?n(t,b):t:t+(c?"."+b:"["+b+"]");Ut(g,qt(S,R,n,r,i,a,s,o,c,u,l,d,h,f))}}return g}function Qt(e,t){return e&&"string"==typeof e&&t.comma&&-1<e.indexOf(",")?e.split(","):e}function Vt(e,t,n,r){if(e){var i=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,s=0<n.depth&&/(\[[^[\]]*])/.exec(i),o=s?i.slice(0,s.index):i,c=[];if(o){if(!n.plainObjects&&un.call(Object.prototype,o)&&!n.allowPrototypes)return;c.push(o)}for(var u=0;0<n.depth&&null!==(s=a.exec(i))&&u<n.depth;){if(u+=1,!n.plainObjects&&un.call(Object.prototype,s[1].slice(1,-1))&&!n.allowPrototypes)return;c.push(s[1])}return s&&c.push("["+i.slice(s.index)+"]"),function(e,t,n,r){for(var i=r?t:Qt(t,n),a=e.length-1;0<=a;--a){var s,o=e[a];if("[]"===o&&n.parseArrays)s=[].concat(i);else{s=n.plainObjects?Object.create(null):{};var c="["===o.charAt(0)&&"]"===o.charAt(o.length-1)?o.slice(1,-1):o,u=parseInt(c,10);n.parseArrays||""!==c?!isNaN(u)&&o!==c&&String(u)===c&&0<=u&&n.parseArrays&&u<=n.arrayLimit?(s=[])[u]=i:s[c]=i:s={0:i}}i=s}return i}(c,t,n,r)}}function $t(e){e&&(window.document.title=e)}var Kt=String.prototype.replace,zt=/%20/g,Jt="RFC3986",Yt={default:Jt,formatters:{RFC1738:function(e){return Kt.call(e,zt,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:Jt},Xt=Object.prototype.hasOwnProperty,Gt=Array.isArray,Zt=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),en={arrayToObject:Bt,assign:function(e,n){return Object.keys(n).reduce(function(e,t){return e[t]=n[t],e},e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var i=t[r],a=i.obj[i.prop],s=Object.keys(a),o=0;o<s.length;++o){var c=s[o],u=a[c];"object"==typeof u&&null!==u&&-1===n.indexOf(u)&&(t.push({obj:a,prop:c}),n.push(u))}return function(e){for(;1<e.length;){var t=e.pop(),n=t.obj[t.prop];if(Gt(n)){for(var r=[],i=0;i<n.length;++i)void 0!==n[i]&&r.push(n[i]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");
vendor: 1,115 bytes, line 12479
12479if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,r,i){if(0===e.length)return e;var a=e;if("symbol"==typeof e?a=Symbol.prototype.toString.call(e):"string"!=typeof e&&(a=String(e)),"iso-8859-1"===n)return escape(a).replace(/%u[0-9a-f]{4}/gi,function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"});for(var s="",o=0;o<a.length;++o){var c=a.charCodeAt(o);45===c||46===c||95===c||126===c||48<=c&&c<=57||65<=c&&c<=90||97<=c&&c<=122||i===Yt.RFC1738&&(40===c||41===c)?s+=a.charAt(o):c<128?s+=Zt[c]:c<2048?s+=Zt[192|c>>6]+Zt[128|63&c]:c<55296||57344<=c?s+=Zt[224|c>>12]+Zt[128|c>>6&63]+Zt[128|63&c]:(o+=1,c=65536+((1023&c)<<10|1023&a.charCodeAt(o)),s+=Zt[240|c>>18]+Zt[128|c>>12&63]+Zt[128|c>>6&63]+Zt[128|63&c])}return s},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(Gt(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)}
12479,merge:function r(i,a,s){if(!a)return i;if("object"!=typeof a){if(Gt(i))i.push(a);else{if(!i||"object"!=typeof i)return[i,a];(s&&(s.plainObjects||s.allowPrototypes)||!Xt.call(Object.prototype,a))&&(i[a]=!0)}return i}if(!i||"object"!=typeof i)return[i].concat(a);var e=i;return Gt(i)&&!Gt(a)&&(e=Bt(i,s)),Gt(i)&&Gt(a)?(a.forEach(function(e,t){if(Xt.call(i,t)){var n=i[t];n&&"object"==typeof n&&e&&"object"==typeof e?i[t]=r(n,e,s):i.push(e)}else i[t]=e}),i):Object.keys(a).reduce(function(e,t){var n=a[t];return Xt.call(e,t)?e[t]=r(e[t],n,s):e[t]=n,e},e)}},tn=Object.prototype.hasOwnProperty,nn={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},rn=Array.isArray,an=Array.prototype.push,sn=Date.prototype.toISOString,on=Yt.default,cn={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:en.encode,encodeValuesOnly:!1,format:on,formatter:Yt.formatters[on],indices:!1,serializeDate:function(e){return sn.call(e)},skipNulls:!1,strictNullHandling:!1},un=Object.prototype.hasOwnProperty,ln=Array.isArray,dn={allowDots:!1,allowPrototypes:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:en.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},hn={formats:Yt,parse:function(e,t){var n=function(e){if(!e)return dn;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?dn.charset:e.charset;return{allowDots:void 0===e.allowDots?dn.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:dn.allowPrototypes,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:dn.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:dn.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:dn.comma,decoder:"function"==typeof e.decoder?e.decoder:dn.decoder,delimiter:"string"==typeof e.delimiter||en.isRegExp(e.delimiter)?e.delimiter:dn.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:dn.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:dn.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:dn.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:dn.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:dn.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var r="string"==typeof e?function(e,t){var n,r={},i=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,a=t.parameterLimit===1/0?void 0:t.parameterLimit,s=i.split(t.delimiter,a),o=-1,c=t.charset;if(t.charsetSentinel)for(n=0;n<s.length;++n)0===s[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===s[n]?c="utf-8":"utf8=%26%2310003%3B"===s[n]&&(c="iso-8859-1"),o=n,n=s.length);for(n=0;n<s.length;++n)if(n!==o){var u,l,d=s[n],h=d.indexOf("]="),f=-1===h?d.indexOf("="):h+1;(l=-1===f?(u=t.decoder(d,dn.decoder,c,"key"),t.strictNullHandling?null:""):(u=t.decoder(d.slice(0,f),dn.decoder,c,"key"),en.maybeMap(Qt(d.slice(f+1),t),function(e){return t.decoder(e,dn.decoder,c,"value")})))&&t.interpretNumericEntities&&"iso-8859-1"===c&&(l=l.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})),-1<d.indexOf("[]=")&&(l=ln(l)?[l]:l),un.call(r,u)?r[u]=en.combine(r[u],l):r[u]=l}return r}(e,n):e,i=n.plainObjects?Object.create(null):{},a=Object.keys(r),s=0;s<a.length;++s){var o=a[s],c=Vt(o,r[o],n,"string"==typeof e);i=en.merge(i,c,n)}return en.compact(i)},stringify:function(e,t){var n,r=e,i=function(e){if(!e)return cn;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||cn.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=Yt.default;if(void 0!==e.format){if(!tn.call(Yt.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=Yt.formatters[n],i=cn.filter;return"function"!=typeof e.filter&&!rn(e.filter)||(i=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:cn.addQueryPrefix,allowDots:void 0===e.allowDots?cn.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:cn.charsetSentinel,delimiter:void 0===e.delimiter?cn.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:cn.encode,encoder:"function"==typeof e.encoder?e.encoder:cn.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:cn.encodeValuesOnly,filter:i,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:cn.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:cn.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:cn.strictNullHandling}}(t);"function"==typeof i.filter?r=(0,i.filter)("",r):rn(i.filter)&&(n=i.filter);var a,s=[];if("object"!=typeof r||null===r)return"";a=t&&t.arrayFormat in nn?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var o=nn[a];n=n||Object.keys(r),i.sort&&n.sort(i.sort);for(var c=0;c<n.length;++c){var u=n[c];i.skipNulls&&null===r[u]||Ut(s,qt(r[u],u,o,i.strictNullHandling,i.skipNulls,i.encode?i.encoder:null,i.filter,i.sort,i.allowDots,i.serializeDate,i.format,i.formatter,i.encodeValuesOnly,i.charset))}var l=s.join(i.delimiter),d=!0===i.addQueryPrefix?"?":"";return i.charsetSentinel&&("iso-8859-1"===i.charset?d+="utf8=%26%2310003%3B&":d+="utf8=%E2%9C%93&"),0<l.length?d+l:""}},fn=function(){function c(e){var r=this,t=e.windowTitle,n=e.writeDelay,i=void 0===n?400:n,a=e.createURL,s=e.parseURL,o=e.getLocation;C(this,c),k(this,"windowTitle",void 0),k(this,"writeDelay",void 0),k(this,"_createURL",void 0),k(this,"parseURL",void 0),k(this,"getLocation",void 0),k(this,"writeTimer",void 0),k(this,"inPopState",!1),k(this,"isDisposed",!1),k(this,"latestAcknowledgedHistory",0),this.windowTitle=t,this.writeTimer=void 0,this.writeDelay=i,this._createURL=a,this.parseURL=s,this.getLocation=o,St(function(e){var t=e.window,n=r.windowTitle&&r.windowTitle(r.read());$t(n),r.latestAcknowledgedHistory=t.history.length})}return E(c,[{key:"read",value:function(){return this.parseURL({qsModule:hn,location:this.getLocation()})}},{key:"write",value:function(i){var a=this;St(function(e){var t=e.window,n=a.createURL(i),r=a.windowTitle&&a.windowTitle(i);a.writeTimer&&clearTimeout(a.writeTimer),a.writeTimer=setTimeout(function(){$t(r),a.shouldWrite(n)&&(t.history.pushState(i,r||"",n),a.latestAcknowledgedHistory=t.history.length),a.inPopState=!1,a.writeTimer=void 0},a.writeDelay)})}}
12479,{key:"onUpdate",value:function(n){var r=this;this._onPopState=function(e){r.writeTimer&&(clearTimeout(r.writeTimer),r.writeTimer=void 0),r.inPopState=!0;var t=e.state;n(t||r.read())},St(function(e){e.window.addEventListener("popstate",r._onPopState)})}},{key:"createURL",value:function(e){return this._createURL({qsModule:hn,routeState:e,location:this.getLocation()})}},{key:"dispose",value:function(){var n=this;this.isDisposed=!0,St(function(e){var t=e.window;n._onPopState&&t.removeEventListener("popstate",n._onPopState)}),this.writeTimer&&clearTimeout(this.writeTimer),this.write({})}},{key:"shouldWrite",value:function(r){var i=this;return St(function(e){var t=e.window,n=!(i.isDisposed&&i.latestAcknowledgedHistory!==t.history.length);return!i.inPopState&&n&&r!==t.location.href})}}]),c}();function mn(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=e.createURL,n=void 0===t?function(e){var t=e.qsModule,n=e.routeState,r=e.location,i=r.protocol,a=r.hostname,s=r.port,o=void 0===s?"":s,c=r.pathname,u=r.hash,l=t.stringify(n),d=""===o?"":":".concat(o);return l?"".concat(i,"//").concat(a).concat(d).concat(c,"?").concat(l).concat(u):"".concat(i,"//").concat(a).concat(d).concat(c).concat(u)}:t,r=e.parseURL,i=void 0===r?function(e){var t=e.qsModule,n=e.location;return t.parse(n.search.slice(1),{arrayLimit:99})}:r,a=e.writeDelay,s=void 0===a?400:a,o=e.windowTitle,c=e.getLocation;return new fn({createURL:n,parseURL:i,writeDelay:s,windowTitle:o,getLocation:void 0===c?function(){return St(function(e){return e.window.location},{fallback:function(){throw new Error("You need to provide `getLocation` to the `history` router in environments where `window` does not exist.")}})}:c})}function pn(e){var t=0<arguments.length&&void 0!==e?e:{},n=t.router,a=void 0===n?mn():n,r=t.stateMapping,s=void 0===r?Dt():r;return function(e){var r=e.instantSearchInstance;r._createURL=function(n){var e=Object.keys(n).reduce(function(e,t){return W(W({},e),{},k({},t,n[t]))},r.mainIndex.getWidgetUiState({})),t=s.stateToRoute(e);return a.createURL(t)};var i=void 0,t=r._initialUiState;return{onStateChange:function(e){var t=e.uiState,n=s.stateToRoute(t);void 0!==i&&De(i,n)||(a.write(n),i=n)},subscribe:function(){r._initialUiState=W(W({},t),s.routeToState(a.read())),a.onUpdate(function(e){r.setUiState(s.routeToState(e))})},unsubscribe:function(){a.dispose()}}}}function gn(){return St(function(e){var t,n;return-1<(null===(t=e.window.navigator)||void 0===t?void 0:null===(n=t.userAgent)||void 0===n?void 0:n.indexOf("Algolia Crawler"))},{fallback:function(){return!1}})}function vn(){return function(e){var t=e.instantSearchInstance,n={widgets:[]},r=document.createElement("meta"),i=document.querySelector("head");return r.name="instantsearch:widgets",{onStateChange:function(){},subscribe:function(){setTimeout(function(){var e=t.client;n.ua=e.transporter&&e.transporter.userAgent?e.transporter.userAgent.value:e._ua,function i(e,a,s){var t=a.mainIndex,o={instantSearchInstance:a,parent:t,scopedResults:[],state:t.getHelper().state,helper:t.getHelper(),createURL:t.createURL,uiState:a._initialUiState,renderState:a.renderState,templatesConfig:a.templatesConfig,searchMetadata:{isSearchStalled:a._isSearchStalled}};e.forEach(function(e){var t={};if(e.getWidgetRenderState){var n=e.getWidgetRenderState(o);n&&n.widgetParams&&(t=n.widgetParams)}var r=Object.keys(t).filter(function(e){return void 0!==t[e]});s.widgets.push({type:e.$$type,widgetType:e.$$widgetType,params:r}),"ais.index"===e.$$type&&i(e.getWidgets(),a,s)})}(t.mainIndex.getWidgets(),t,n),r.content=JSON.stringify(n),i.appendChild(r)},0)},unsubscribe:function(){r.remove()}}}}var yn=st({name:"instantsearch"});function bn(){return"#"}function Sn(i,e){var h=1<arguments.length&&void 0!==e?e:Le;return ke(i,wn()),function(a){var e=a||{},t=e.includedAttributes,s=void 0===t?[]:t,n=e.excludedAttributes,o=void 0===n?["query"]:n,r=e.transformItems,c=void 0===r?function(e){return e}:r;if(a&&a.includedAttributes&&a.excludedAttributes)throw new Error(wn("The options `includedAttributes` and `excludedAttributes` cannot be used together."));function u(){return d.refine()}function l(){return d.createURL()}var d={refine:Le,createURL:function(){return""},attributesToClear:[]};return{$$type:"ais.clearRefinements",init:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(){h()},getRenderState:function(e,t){return W(W({},e),{},{clearRefinements:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.createURL,n=e.scopedResults,r=e.results;d.attributesToClear=n.reduce(function(e,t){return e.concat(function(e){var t=e.scopedResult,n=e.includedAttributes,r=e.excludedAttributes,i=e.transformItems,a=e.results,s=-1!==n.indexOf("query")||-1===r.indexOf("query");return{helper:t.helper,items:i(Se(Ce(t.results,t.helper.state,s).map(function(e){return e.attribute}).filter(function(e){return 0===n.length||-1!==n.indexOf(e)}).filter(function(e){return"query"===e&&s||-1===r.indexOf(e)})),{results:a})}}({scopedResult:t,includedAttributes:s,excludedAttributes:o,transformItems:c,results:r}))},[]),d.refine=function(){d.attributesToClear.forEach(function(e){var t=e.helper,n=e.items;t.setState(Ee({helper:t,attributesToClear:n})).search()})},d.createURL=function(){return t(it.apply(void 0,P(d.attributesToClear.map(function(e){return Ee({helper:e.helper,attributesToClear:e.items})}))))};var i=d.attributesToClear.some(function(e){return 0<e.items.length});return{canRefine:i,hasRefinements:i,refine:u,createURL:l,widgetParams:a}}}}}var Rn=function(){L(S,G);var b=O(S);function S(e){var n;C(this,S),k(M(n=b.call(this)),"client",void 0),k(M(n),"indexName",void 0),k(M(n),"insightsClient",void 0),k(M(n),"onStateChange",null),k(M(n),"helper",void 0),k(M(n),"mainHelper",void 0),k(M(n),"mainIndex",void 0),k(M(n),"started",void 0),k(M(n),"templatesConfig",void 0),k(M(n),"renderState",{}),k(M(n),"_stalledSearchDelay",void 0),k(M(n),"_searchStalledTimer",void 0),k(M(n),"_isSearchStalled",void 0),k(M(n),"_initialUiState",void 0),k(M(n),"_initialResults",void 0),k(M(n),"_createURL",void 0),k(M(n),"_searchFunction",void 0),k(M(n),"_mainHelperSearch",void 0),k(M(n),"middleware",[]),k(M(n),"sendEventToInsights",void 0),k(M(n),"scheduleSearch",ge(function(){n.started&&n.mainHelper.search()})),k(M(n),"scheduleRender",ge(function(){n.mainHelper.hasPendingRequests()||(clearTimeout(n._searchStalledTimer),n._searchStalledTimer=null,n._isSearchStalled=!1),n.mainIndex.render({instantSearchInstance:M(n)}),n.emit("render")})),k(M(n),"onInternalStateChange",ge(function(){var t=n.mainIndex.getWidgetUiState({});n.middleware.forEach(function(e){e.instance.onStateChange({uiState:t})})}));var t=e.indexName,r=void 0===t?null:t,i=e.numberLocale,a=e.initialUiState,s=void 0===a?{}:a,o=e.routing,c=void 0===o?null:o,u=e.searchFunction,l=e.stalledSearchDelay,d=void 0===l?200:l,h=e.searchClient,f=void 0===h?null:h,m=e.insightsClient,p=void 0===m?null:m,g=e.onStateChange,v=void 0===g?null:g;if(null===r)throw new Error(yn("The `indexName` option is required."));if(null===f)throw new Error(yn("The `searchClient` option is required."));if("function"!=typeof f.search)throw new Error("The `searchClient` must implement a `search` method.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend-search/in-depth/backend-instantsearch/js/");if("function"==typeof f.addAlgoliaAgent&&f.addAlgoliaAgent("instantsearch.js (".concat("4.43.0",")")),p&&"function"!=typeof p)throw new Error(yn("The `insightsClient` option should be a function."));if(n.client=f,n.insightsClient=p,n.indexName=r,n.helper=null,n.mainHelper=null,n.mainIndex=Nt({indexName:r}),n.onStateChange=v,n.started=!1,n.templatesConfig={helpers:function(e){var n=e.numberLocale;return{formatNumber:function(e,t){return Number(t(e)).toLocaleStr
12479ing(n)},highlight:function(e,t){try{return t(Ct(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\nThe highlight helper expects a JSON object of the format:\n{ "attribute": "name", "highlightedTagName": "mark" }')}},reverseHighlight:function(e,t){try{return t(kt(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\n  The reverseHighlight helper expects a JSON object of the format:\n  { "attribute": "name", "highlightedTagName": "mark" }')}},snippet:function(e,t){try{return t(jt(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\nThe snippet helper expects a JSON object of the format:\n{ "attribute": "name", "highlightedTagName": "mark" }')}},reverseSnippet:function(e,t){try{return t(Ot(W(W({},JSON.parse(e)),{},{hit:this})))}catch(e){throw new Error('\n  The reverseSnippet helper expects a JSON object of the format:\n  { "attribute": "name", "highlightedTagName": "mark" }')}},insights:function(e,t){try{var n=JSON.parse(e),r=n.method,i=n.payload;return t(At(r,W({objectIDs:[this.objectID]},i)))}catch(e){throw new Error('\nThe insights helper expects a JSON object of the format:\n{ "method": "method-name", "payload": { "eventName": "name of the event" } }')}}}}({numberLocale:i}),compileOptions:{}},n._stalledSearchDelay=d,n._searchStalledTimer=null,n._isSearchStalled=!1,n._createURL=bn,n._initialUiState=s,n._initialResults=null,u&&(n._searchFunction=u),n.sendEventToInsights=Le,c){var y="boolean"==typeof c?void 0:c;n.use(pn(y))}return gn()&&n.use(vn()),n}return E(S,[{key:"use",value:function(){for(var n=this,e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var i=t.map(function(e){var t=W({subscribe:Le,unsubscribe:Le,onStateChange:Le},e({instantSearchInstance:n}));return n.middleware.push({creator:e,instance:t}),t});return this.started&&i.forEach(function(e){e.subscribe()}),this}},{key:"unuse",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.middleware.filter(function(e){return t.includes(e.creator)}).forEach(function(e){return e.instance.unsubscribe()}),this.middleware=this.middleware.filter(function(e){return!t.includes(e.creator)}),this}},{key:"EXPERIMENTAL_use",value:function(){return this.use.apply(this,arguments)}},{key:"addWidget",value:function(e){return this.addWidgets([e])}},{key:"addWidgets",value:function(e){if(!Array.isArray(e))throw new Error(yn("The `addWidgets` method expects an array of widgets. Please use `addWidget`."));if(e.some(function(e){return"function"!=typeof e.init&&"function"!=typeof e.render}))throw new Error(yn("The widget definition expects a `render` and/or an `init` method."));return this.mainIndex.addWidgets(e),this}},{key:"removeWidget",value:function(e){return this.removeWidgets([e])}},{key:"removeWidgets",value:function(e){if(!Array.isArray(e))throw new Error(yn("The `removeWidgets` method expects an array of widgets. Please use `removeWidget`."));if(e.some(function(e){return"function"!=typeof e.dispose}))throw new Error(yn("The widget definition expects a `dispose` method."));return this.mainIndex.removeWidgets(e),this}},{key:"start",value:function(){var r=this;if(this.started)throw new Error(yn("The `start` method has already been called once."));var t=this.mainHelper||pe(this.client,this.indexName);if(t.search=function(){return t.searchOnlyWithDerivedHelpers()},this._searchFunction){var i={search:function(){return new Promise(Le)}};this._mainHelperSearch=t.search.bind(t),t.search=function(){var n=r.mainIndex.getHelper(),e=pe(i,n.state.index,n.state);return e.once("search",function(e){var t=e.state;n.overrideStateWithoutTriggeringChangeEvent(t),r._mainHelperSearch()}),e.on("change",function(e){var t=e.state;n.setState(t)}),r._searchFunction(e),t}}if(t.on("error",function(e){var t=e.error;t.error=t,r.emit("error",t)}),this.mainHelper=t,this.middleware.forEach(function(e){e.instance.subscribe()}),this.mainIndex.init({instantSearchInstance:this,parent:null,uiState:this._initialUiState}),this._initialResults){var e=this.scheduleSearch;this.scheduleSearch=ge(Le),ge(function(){r.scheduleSearch=e})()}else 0<this.mainIndex.getWidgets().length&&this.scheduleSearch();this.helper=this.mainIndex.getHelper(),this.started=!0}},{key:"dispose",value:function(){this.scheduleSearch.cancel(),this.scheduleRender.cancel(),clearTimeout(this._searchStalledTimer),this.removeWidgets(this.mainIndex.getWidgets()),this.mainIndex.dispose(),this.started=!1,this.removeAllListeners(),this.mainHelper.removeAllListeners(),this.mainHelper=null,this.helper=null,this.middleware.forEach(function(e){e.instance.unsubscribe()})}},{key:"scheduleStalledRender",value:function(){var e=this;this._searchStalledTimer||(this._searchStalledTimer=setTimeout(function(){e._isSearchStalled=!0,e.scheduleRender()},this._stalledSearchDelay))}},{key:"setUiState",value:function(e){if(!this.mainHelper)throw new Error(yn("The `start` method needs to be called before `setUiState`."));this.mainIndex.refreshUiState();var r="function"==typeof e?e(this.mainIndex.getWidgetUiState({})):e;!function e(t){var n=r[t.getIndexId()]||{};
12479t.getHelper().setState(t.getWidgetSearchParameters(t.getHelper().state,{uiState:n})),t.getWidgets().filter(wt).forEach(e)}(this.mainIndex),this.scheduleSearch(),this.onInternalStateChange()}},{key:"getUiState",value:function(){return this.started&&this.mainIndex.refreshUiState(),this.mainIndex.getWidgetUiState({})}},{key:"createURL",value:function(e){var t=0<arguments.length&&void 0!==e?e:{};if(!this.started)throw new Error(yn("The `start` method needs to be called before `createURL`."));return this._createURL(t)}},{key:"refresh",value:function(){if(!this.mainHelper)throw new Error(yn("The `start` method needs to be called before `refresh`."));this.mainHelper.clearCache().search()}}]),S}(),wn=st({name:"clear-refinements",connector:!0});function _n(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,Pn()),function(s){if((s||{}).includedAttributes&&(s||{}).excludedAttributes)throw new Error(Pn("The options `includedAttributes` and `excludedAttributes` cannot be used together."));var e=s||{},o=e.includedAttributes,t=e.excludedAttributes,c=void 0===t?["query"]:t,n=e.transformItems,u=void 0===n?function(e){return e}:n;return{$$type:"ais.currentRefinements",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(){i()},getRenderState:function(e,t){return W(W({},e),{},{currentRefinements:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var n=e.results,t=e.scopedResults,r=e.createURL,i=e.helper;var a=n?t.reduce(function(e,t){return e.concat(u(xn({results:t.results,helper:t.helper,includedAttributes:o,excludedAttributes:c}),{results:n}))},[]):u(xn({results:{},helper:i,includedAttributes:o,excludedAttributes:c}),{results:n});return{items:a,canRefine:0<a.length,refine:function(e){return In(i,e)},createURL:function(e){return r(Nn(i.state,e))},widgetParams:s}}}}}var Pn=st({name:"current-refinements",connector:!0});function xn(e){var t=e.results,n=e.helper,r=e.includedAttributes,i=e.excludedAttributes,a=-1!==(r||[]).indexOf("query")||-1===(i||[]).indexOf("query"),s=r?function(e){return-1!==r.indexOf(e.attribute)}:function(e){return-1===i.indexOf(e.attribute)},o=Ce(t,n.state,a).map(Fn).filter(s);return o.reduce(function(e,t){return[].concat(P(e.filter(function(e){return e.attribute!==t.attribute})),[{indexName:n.state.index,attribute:t.attribute,label:t.attribute,refinements:o.filter(function(e){return e.attribute===t.attribute}).sort(function(e,t){return"numeric"===e.type?e.value-t.value:0}),refine:function(e){return In(n,e)}}])},[])}function Nn(e,t){switch(t.type){case"facet":return e.removeFacetRefinement(t.attribute,String(t.value));case"disjunctive":return e.removeDisjunctiveFacetRefinement(t.attribute,String(t.value));case"hierarchical":return e.removeHierarchicalFacetRefinement(t.attribute);case"exclude":return e.removeExcludeRefinement(t.attribute,String(t.value));case"numeric":return e.removeNumericRefinement(t.attribute,t.operator,String(t.value));case"tag":return e.removeTagRefinement(String(t.value));case"query":return e.setQueryParameter("query","");default:return e}}function In(e,t){e.setState(Nn(e.state,t)).search()}function Fn(e){var t=function(e){if("numeric"===e.type)return Number(e.name);if("escapedValue"in e)return e.escapedValue;return e.name}(e),n=e.operator?"".concat(function(e){switch(e){case">=":return"≥";case"<=":return"≤";default:return e}}(e.operator)," ").concat(e.name):e.name,r={attribute:e.attribute,type:e.type,value:t,label:n};return void 0!==e.operator&&(r.operator=e.operator),void 0!==e.count&&(r.count=e.count),void 0!==e.exhaustive&&(r.exhaustive=e.exhaustive),r}function Tn(N,e){var I=1<arguments.length&&void 0!==e?e:Le;return ke(N,kn()),function(d){var e=d||{},c=e.attributes,t=e.separator,u=void 0===t?" > ":t,n=e.rootPath,l=void 0===n?null:n,r=e.showParentLevel,h=void 0===r||r,i=e.limit,f=void 0===i?10:i,a=e.showMore,m=void 0!==a&&a,s=e.showMoreLimit,p=void 0===s?20:s,o=e.sortBy,g=void 0===o?Ln:o,v=e.transformItems,y=void 0===v?function(e){return e}:v;if(!c||!Array.isArray(c)||0===c.length)throw new Error(kn("The `attributes` option expects an array of str
12479ings."));if(!0===m&&p<=f)throw new Error(kn("The `showMoreLimit` option must be greater than `limit`."));var b,S,R=D(c,1)[0],w=function(){};function _(){w()}var P=!1;function x(){return P?p:f}return{$$type:"ais.hierarchicalMenu",init:function(e){var t=e.instantSearchInstance;N(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;w=function(e,t){return function(){P=!P,t.render(e)}}(e,this),N(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return I(),t.removeHierarchicalFacet(R).setQueryParameter("maxValuesPerFacet",void 0)},getRenderState:function(e,t){return W(W({},e),{},{hierarchicalMenu:W(W({},e.hierarchicalMenu),{},k({},R,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.state,r=e.createURL,i=e.instantSearchInstance,a=e.helper,s=[],o=!1;if(b=b||dt({instantSearchInstance:i,helper:a,attribute:R,widgetType:this.$$type}),S=S||function(e){b("click",e),a.toggleFacetRefinement(R,e).search()},t){var c=t.getFacetValues(R,{sortBy:g,facetOrdering:g===Ln}),u=c&&!Array.isArray(c)&&c.data?c.data:[],l=(n.maxValuesPerFacet||0)>x()?u.length<=x():u.length<x();o=m&&(P||!l),s=y(function a(e){return e.slice(0,x()).map(function(e){var t=e.name,n=e.escapedValue,r=e.data,i=(e.path,W(W({},j(e,["name","escapedValue","data","path"])),{},{value:n,label:t,data:null}));return Array.isArray(r)&&(i.data=a(r)),i})}(u),{results:t})}return{items:s,refine:S,canRefine:0<s.length,createURL:function(e){return r(n.resetPage().toggleFacetRefinement(R,e))},sendEvent:b,widgetParams:d,isShowingMore:P,toggleShowMore:_,canToggleShowMore:o}},getWidgetUiState:function(e,t){var n=t.searchParameters.getHierarchicalFacetBreadcrumb(R);return n.length?W(W({},e),{},{hierarchicalMenu:W(W({},e.hierarchicalMenu),{},k({},R,n))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.hierarchicalMenu&&n.hierarchicalMenu[R];if(e.isHierarchicalFacet(R))e.getHierarchicalFacetByName(R);var i=e.removeHierarchicalFacet(R).addHierarchicalFacet({name:R,attributes:c,separator:u,rootPath:l,showParentLevel:h}),a=i.maxValuesPerFacet||0,s=Math.max(a,m?p:f),o=i.setQueryParameter("maxValuesPerFacet",s);return r?o.addHierarchicalFacetRefinement(R,r.join(u)):o.setQueryParameters({hierarchicalFacetsRefinements:W(W({},o.hierarchicalFacetsRefinements),{},k({},R,[]))})}}}}function Cn(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,jn()),function(a){var s,o,e=a||{},t=e.escapeHTML,c=void 0===t||t,n=e.transformItems,u=void 0===n?function(e){return e}:n;return{$$type:"ais.hits",init:function(e){r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){var t=this.getWidgetRenderState(e);r(W(W({},t),{},{instantSearchInstance:e.instantSearchInstance}),!1),t.sendEvent("view",t.hits)},getRenderState:function(e,t){return W(W({},e),{},{hits:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.instantSearchInstance;if(s=s||pt({instantSearchInstance:r,index:n.getIndex(),widgetType:this.$$type}),o=o||gt({index:n.getIndex(),widgetType:this.$$type}),!t)return{hits:[],results:void 0,sendEvent:s,bindEvent:o,widgetParams:a};c&&0<t.hits.length&&(t.hits=Xe(t.hits));var i=lt(ut(t.hits,t.page,t.hitsPerPage),t.queryID);return{hits:u(i,{results:t}),results:t,sendEvent:s,bindEvent:o,widgetParams:a}},dispose:function(e){var t=e.state;return i(),c?t.setQueryParameters(Object.keys(Ke).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{})):t},getWidgetSearchParameters:function(e){return c?e.setQueryParameters(Ke):e}}}}function En(e){var t=e.method,n=e.results,r=e.hits,i=e.objectIDs,a=n.index,s=function(n,e){return e.map(function(t){var e=Ie(n,function(e){return e.objectID===t});if(void 0===e)throw new Error('Could not find objectID "'.concat(t,'" passed to `clickedObjectIDsAfterSearch` in the returned hits. This is necessary to infer the absolute position and the query ID.'));return e})}(r,i),o=function(e){var t=Se(e.map(function(e){return e.__queryID}));
12479if(1<t.length)throw new Error("Insights currently allows a single `queryID`. The `objectIDs` provided map to multiple `queryID`s.");var n=t[0];if("string"!=typeof n)throw new Error("Could not infer `queryID`. Ensure InstantSearch `clickAnalytics: true` was added with the Configure widget.\n\nSee: https://alg.li/lNiZZ7");return n}(s);switch(t){case"clickedObjectIDsAfterSearch":return{index:a,queryID:o,objectIDs:i,positions:function(e){return e.map(function(e){return e.__position})}(s)};case"convertedObjectIDsAfterSearch":return{index:a,queryID:o,objectIDs:i};default:throw new Error('Unsupported method passed to insights: "'.concat(t,'".'))}}var kn=st({name:"hierarchical-menu",connector:!0}),Ln=["name:asc"],jn=st({name:"hits",connector:!0});function Mn(t){return function(s,e){return t(function(e,t){var n=e.results,r=e.hits,i=e.instantSearchInstance;if(n&&r&&i){var a=function(o,c,u){return function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=n[0];if(!o){var a=st({name:"instantsearch"});throw new Error(a("The `insightsClient` option has not been provided to `instantsearch`."))}if(!Array.isArray(i.objectIDs))throw new TypeError("Expected `objectIDs` to be an array.");var s=En({method:e,results:c,hits:u,objectIDs:i.objectIDs});o(e,W(W({},s),i))}}(i.insightsClient,n,r);return s(W(W({},e),{},{insights:a}),t)}return s(e,t)},e)}}var On,An,Hn,Wn,Dn,Bn,Un={},qn=[],Qn=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function Vn(e,t){for(var n in t)e[n]=t[n];return e}function $n(e){var t=e.parentNode;t&&t.removeChild(e)}function Kn(e,t,n){var r,i,a,s={};for(a in t)"key"==a?r=t[a]:"ref"==a?i=t[a]:s[a]=t[a];if(2<arguments.length&&(s.children=3<arguments.length?On.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===s[a]&&(s[a]=e.defaultProps[a]
vendor: 4,692 bytes, line 12479
12479);return zn(e,s,r,i,null)}function zn(e,t,n,r,i){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==i?++Hn:i};return null==i&&null!=An.vnode&&An.vnode(a),a}function Jn(e){return e.children}function Yn(e,t){this.props=e,this.context=t}function Xn(e,t){if(null==t)return e.__?Xn(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?Xn(e):null}function Gn(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Gn(e)}}function Zn(e){(!e.__d&&(e.__d=!0)&&Wn.push(e)&&!er.__r++||Bn!==An.debounceRendering)&&((Bn=An.debounceRendering)||Dn)(er)}function er(){for(var e;er.__r=Wn.length;)e=Wn.sort(function(e,t){return e.__v.__b-t.__v.__b}),Wn=[],e.some(function(e){var t,n,r,i,a,s;e.__d&&(a=(i=(t=e).__v).__e,(s=t.__P)&&(n=[],(r=Vn({},i)).__v=i.__v+1,cr(s,i,r,t.__n,void 0!==s.ownerSVGElement,null!=i.__h?[a]:null,n,null==a?Xn(i):a,i.__h),ur(n,i),i.__e!=a&&Gn(i)))})}function tr(e,t,n,r,i,a,s,o,c,u){var l,d,h,f,m,p,g,v=r&&r.__k||qn,y=v.length;for(n.__k=[],l=0;l<t.length;l++)if(null!=(f=n.__k[l]=null==(f=t[l])||"boolean"==typeof f?null:"string"==typeof f||"number"==typeof f||"bigint"==typeof f?zn(null,f,null,null,f):Array.isArray(f)?zn(Jn,{children:f},null,null,null):0<f.__b?zn(f.type,f.props,f.key,null,f.__v):f)){if(f.__=n,f.__b=n.__b+1,null===(h=v[l])||h&&f.key==h.key&&f.type===h.type)v[l]=void 0;else for(d=0;d<y;d++){if((h=v[d])&&f.key==h.key&&f.type===h.type){v[d]=void 0;break}h=null}cr(e,f,h=h||Un,i,a,s,o,c,u),m=f.__e,(d=f.ref)&&h.ref!=d&&(g=g||[],h.ref&&g.push(h.ref,null,f),g.push(d,f.__c||m,f)),null!=m?(null==p&&(p=m),"function"==typeof f.type&&f.__k===h.__k?f.__d=c=nr(f,c,e):c=rr(e,f,h,v,m,c),"function"==typeof n.type&&(n.__d=c)):c&&h.__e==c&&c.parentNode!=e&&(c=Xn(h))}for(n.__e=p,l=y;l--;)null!=v[l]&&("function"==typeof n.type&&null!=v[l].__e&&v[l].__e==n.__d&&(n.__d=Xn(r,l+1)),dr(v[l],v[l]));if(g)for(l=0;l<g.length;l++)lr(g[l],g[++l],g[++l])}function nr(e,t,n){for(var r,i=e.__k,a=0;i&&a<i.length;a++)(r=i[a])&&(r.__=e,t="function"==typeof r.type?nr(r,t,n):rr(n,r,r,i,r.__e,t));return t}function rr(e,t,n,r,i,a){var s,o,c;if(void 0!==t.__d)s=t.__d,t.__d=void 0;else if(null==n||i!=a||null==i.parentNode)e:if(null==a||a.parentNode!==e)e.appendChild(i),s=null;else{for(o=a,c=0;(o=o.nextSibling)&&c<r.length;c+=2)if(o==i)break e;e.insertBefore(i,a),s=a}return void 0!==s?s:i.nextSibling}function ir(e,t,n){"-"===t[0]?e.setProperty(t,n):e[t]=null==n?"":"number"!=typeof n||Qn.test(t)?n:n+"px"}function ar(e,t,n,r,i){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||ir(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||ir(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?or:sr,a):e.removeEventListener(t,a?or:sr,a);else if("dangerouslySetInnerHTML"!==t){if(i)t=t.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null!=n&&(!1!==n||"a"===t[0]&&"r"===t[1])?e.setAttribute(t,n):e.removeAttribute(t))}}function sr(e){this.l[e.type+!1](An.event?An.event(e):e)}function or(e){this.l[e.type+!0](An.event?An.event(e):e)}function cr(e,t,n,r,i,a,s,o,c){var u,l,d,h,f,m,p,g,v,y,b,S=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(c=n.__h,o=t.__e=n.__e,t.__h=null,a=[o]),(u=An.__b)&&u(t);try{e:if("function"==typeof S){if(g=t.props,v=(u=S.contextType)&&r[u.__c],y=u?v?v.props.value:u.__:r,n.__c?p=(l=t.__c=n.__c).__=l.__E:("prototype"in S&&S.prototype.render?t.__c=l=new S(g,y):(t.__c=l=new Yn(g,y),l.constructor=S,l.render=hr),v&&v.sub(l),l.props=g,l.state||(l.state={}),l.context=y,l.__n=r,d=l.__d=!0,l.__h=[]),null==l.__s&&(l.__s=l.state),null!=S.getDerivedStateFromProps&&(l.__s==l.state&&(l.__s=Vn({},l.__s)),Vn(l.__s,S.getDerivedStateFromProps(g,l.__s))),h=l.props,f=l.state,d)null==S.getDerivedStateFromProps&&null!=l.componentWillMount&&l.componentWillMount(),null!=l.componentDidMount&&l.__h.push(l.componentDidMount);else{if(null==S.getDerivedStateFromProps&&g!==h&&null!=l.componentWillReceiveProps&&l.componentWillReceiveProps(g,y),!l.__e&&null!=l.shouldComponentUpdate&&!1===l.shouldComponentUpdate(g,l.__s,y)||t.__v===n.__v){l.props=g,l.state=l.__s,t.__v!==n.__v&&(l.__d=!1),(l.__v=t).__e=n.__e,t.__k=n.__k,t.__k.forEac
vendor: 3,758 bytes, line 12479
12479h(function(e){e&&(e.__=t)}),l.__h.length&&s.push(l);break e}null!=l.componentWillUpdate&&l.componentWillUpdate(g,l.__s,y),null!=l.componentDidUpdate&&l.__h.push(function(){l.componentDidUpdate(h,f,m)})}l.context=y,l.props=g,l.state=l.__s,(u=An.__r)&&u(t),l.__d=!1,l.__v=t,l.__P=e,u=l.render(l.props,l.state,l.context),l.state=l.__s,null!=l.getChildContext&&(r=Vn(Vn({},r),l.getChildContext())),d||null==l.getSnapshotBeforeUpdate||(m=l.getSnapshotBeforeUpdate(h,f)),b=null!=u&&u.type===Jn&&null==u.key?u.props.children:u,tr(e,Array.isArray(b)?b:[b],t,n,r,i,a,s,o,c),l.base=t.__e,t.__h=null,l.__h.length&&s.push(l),p&&(l.__E=l.__=null),l.__e=!1}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=function(e,t,n,r,i,a,s,o){var c,u,l,d=n.props,h=t.props,f=t.type,m=0;if("svg"===f&&(i=!0),null!=a)for(;m<a.length;m++)if((c=a[m])&&"setAttribute"in c==!!f&&(f?c.localName===f:3===c.nodeType)){e=c,a[m]=null;break}if(null==e){if(null===f)return document.createTextNode(h);e=i?document.createElementNS("http://www.w3.org/2000/svg",f):document.createElement(f,h.is&&h),a=null,o=!1}if(null===f)d===h||o&&e.data===h||(e.data=h);else{if(a=a&&On.call(e.childNodes),u=(d=n.props||Un).dangerouslySetInnerHTML,l=h.dangerouslySetInnerHTML,!o){if(null!=a)for(d={},m=0;m<e.attributes.length;m++)d[e.attributes[m].name]=e.attributes[m].value;(l||u)&&(l&&(u&&l.__html==u.__html||l.__html===e.innerHTML)||(e.innerHTML=l&&l.__html||""))}if(function(e,t,n,r,i){var a;for(a in n)"children"===a||"key"===a||a in t||ar(e,a,null,n[a],r);for(a in t)i&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||ar(e,a,t[a],n[a],r)}(e,h,d,i,o),l)t.__k=[];else if(m=t.props.children,tr(e,Array.isArray(m)?m:[m],t,n,r,i&&"foreignObject"!==f,a,s,a?a[0]:n.__k&&Xn(n,0),o),null!=a)for(m=a.length;m--;)null!=a[m]&&$n(a[m]);o||("value"in h&&void 0!==(m=h.value)&&(m!==d.value||m!==e.value||"progress"===f&&!m)&&ar(e,"value",m,d.value,!1),"checked"in h&&void 0!==(m=h.checked)&&m!==e.checked&&ar(e,"checked",m,d.checked,!1))}return e}(n.__e,t,n,r,i,a,s,c);(u=An.diffed)&&u(t)}catch(e){t.__v=null,!c&&null==a||(t.__e=o,t.__h=!!c,a[a.indexOf(o)]=null),An.__e(e,t,n)}}function ur(e,t){An.__c&&An.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){An.__e(e,t.__v)}})}function lr(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){An.__e(e,n)}}function dr(e,t,n){var r,i;if(An.unmount&&An.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||lr(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){An.__e(e,t)}r.base=r.__P=null}if(r=e.__k)for(i=0;i<r.length;i++)r[i]&&dr(r[i],t,"function"!=typeof e.type);n||null==e.__e||$n(e.__e),e.__e=e.__d=void 0}function hr(e,t,n){return this.constructor(e,n)}function fr(e,t,n){var r,i,a;An.__&&An.__(e,t),i=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],cr(t,e=(!r&&n||t).__k=Kn(Jn,null,[e]),i||Un,Un,void 0!==t.ownerSVGElement,!r&&n?[n]:i?null:t.firstChild?On.call(t.childNodes):null,a,!r&&n?n:i?i.__e:t.firstChild,r),ur(a,e)}On=qn.slice,An={__e:function(e,t){for(var n,r,i;t=t.__;)if((n=t.__c)&&!n.__)try{if((r=n.constructor)&&null!=r.getDerivedStateFromError&&(n.setState(r.getDerivedStateFromError(e)),i=n.__d),null!=n.componentDidCatch&&(n.componentDidCatch(e),i=n.__d),i)return n.__E=n}catch(t){e=t}throw e}},Hn=0,Yn.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=Vn({},this.state),"function"==typeof e&&(e=e(Vn({},n),this.props)),e&&Vn(n,e),null!=e&&this.__v&&(t&&this.__h.push(t),Zn(this))},Yn.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Zn(this))},Yn.prototype.render=Jn,Wn=[],Dn="function"==typeof Promise?Promise.prototype.then.bind(Prom
12479ise.resolve()):setTimeout,er.__r=0;function mr(e,t,n){for(var r=e;r&&!n(r);){if(r===t)return null;r=r.parentElement}return r}function pr(e){return function(s){return Kn("div",{onClick:function(e){if(s.sendEvent){var t=mr(e.target,e.currentTarget,function(e){return e.hasAttribute("data-insights-event")});if(t)(function(e){var t=e.getAttribute("data-insights-event");if("string"!=typeof t)throw new Error("The insights middleware expects `data-insights-event` to be a base64-encoded JSON string.");try{return ft(t)}catch(e){throw new Error("The insights middleware was unable to parse `data-insights-event`.")}})(t).forEach(function(e){return s.sendEvent(e)})}var n=mr(e.target,e.currentTarget,function(e){return function(e){return e.hasAttribute("data-insights-method")}(e)});if(n){var r=function(e){var t=e.getAttribute("data-insights-method"),n=e.getAttribute("data-insights-payload");if("string"!=typeof n)throw new Error("The insights helper expects `data-insights-payload` to be a base64-encoded JSON string.");try{return{method:t,payload:ft(n)}}catch(e){throw new Error("The insights helper was unable to parse `data-insights-payload`.")}}(n),i=r.method,a=r.payload;s.insights(i,a)}}},Kn(e,s))}}function gr(l,e){var d=1<arguments.length&&void 0!==e?e:Le;return ke(l,yr()),function(a){var e=a||{},t=e.items,n=e.transformItems,s=void 0===n?function(e){return e}:n;if(!Array.isArray(t))throw new Error(yr("The `items` option expects an array of objects."));var o=t,r=o.filter(function(e){return!0===e.default});if(0===r.length)throw new Error(yr("A default value must be specified in `items`."));if(1<r.length)throw new Error(yr("More than one default value is specified in `items`."));var i=r[0],c=function(t){return function(e){return e||0===e?t.setQueryParameter("hitsPerPage",e).search():t.setQueryParameter("hitsPerPage",void 0).search()}},u=function(e){var t=e.state,n=e.createURL;return function(e){return n(t.resetPage().setQueryParameter("hitsPerPage",e||0===e?e:void 0))}};return{$$type:"ais.hitsPerPage",init:function(e){var t=e.state,n=e.instantSearchInstance;o.some(function(e){return Number(t.hitsPerPage)===Number(e.value)})||(o=[{value:"",label:""}].concat(P(o))),l(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:n}),!0)},render:function(e){var t=e.instantSearchInstance;l(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return d(),t.setQueryParameter("hitsPerPage",void 0)},getRenderState:function(e,t){return W(W({},e),{},{hitsPerPage:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.state,n=e.results,r=e.createURL,i=e.helper;return{items:s(function(e){var t=e.hitsPerPage;return o.map(function(e){return W(W({},e),{},{isRefined:Number(e.value)===Number(t)})})}(t),{results:n}),refine:c(i),createURL:u({state:t,createURL:r}),hasNoResults:!n||0===n.nbHits,widgetParams:a}},getWidgetUiState:function(e,t){var n=t.searchParameters.hitsPerPage;return void 0===n||n===i.value?e:W(W({},e),{},{hitsPerPage:n})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameters({hitsPerPage:n.hitsPerPage||i.value})}}}}var vr=Mn(Cn),yr=st({name:"hits-per-page",connector:!0}),br=st({name:"infinite-hits",connector:!0});function Sr(e){var t=e||{};t.page;return j(t,["page"])}function Rr(i,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(i,br()),function(m){function p(e,t){var n=e.page,r=void 0===n?0:n,i=Object.keys(t).map(Number);return 0===i.length?r:Math.min.apply(Math,[r].concat(P(i)))}function g(e,t){var n=e.page,r=void 0===n?0:n,i=Object.keys(t).map(Number);return 0===i.length?r:Math.max.apply(Math,[r].concat(P(i)))}var v,y,b,S,e=m||{},t=e.escapeHTML,R=void 0===t||t,n=e.transformItems,w=void 0===n?function(e){return e}:n,r=e.cache,_=void 0===r?function(){var r=null,i=null;return{read:function(e){var t=e.state;return De(i,Sr(t))?r:null},write:function(e){var t=e.state,n=e.hits;i=Sr(t),r=n}}}():r;return{$$type:"ais.infiniteHits",init:function(e){i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){var t=e.instantSearchInstance,n=this.getWidgetRenderState(e);i(W(W({},n),{},{instantSearchInstance:t}),!1),b("view",n.currentPageHits)},getRenderState:function(e,t){return W(W({},e),{},{infiniteHits:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t,n=e.results,r=e.helper,i=e.state,a=e.instantSearchInstance,s=[],o=_.read({state:i})||{};if(n){var c=i.page,u=void 0===c?0:c;R&&0<n.hits.length&&(n.hits=Xe(n.hits));
12479var l=lt(ut(n.hits,n.page,n.hitsPerPage),n.queryID),d=w(l,{results:n});void 0!==o[u]||n.__isArtificial||(o[u]=d,_.write({state:i,hits:o})),s=d,t=0===p(i,o)}else v=function(e){return function(){e.overrideStateWithoutTriggeringChangeEvent(W(W({},e.state),{},{page:p(e.state,_.read({state:e.state})||{})-1})).searchWithoutTriggeringOnStateChange()}}(r),y=function(e){return function(){e.setPage(g(e.state,_.read({state:e.state})||{})+1).search()}}(r),b=pt({instantSearchInstance:a,index:r.getIndex(),widgetType:this.$$type}),S=gt({index:r.getIndex(),widgetType:this.$$type}),t=void 0===i.page||0===p(i,o);var h=function(n){return Object.keys(n).map(Number).sort(function(e,t){return e-t}).reduce(function(e,t){return e.concat(n[t])},[])}(o),f=!n||n.nbPages<=g(i,o)+1;return{hits:h,currentPageHits:s,sendEvent:b,bindEvent:S,results:n,showPrevious:v,showMore:y,isFirstPage:t,isLastPage:f,widgetParams:m}},dispose:function(e){var t=e.state;a();var n=t.setQueryParameter("page",void 0);return R?n.setQueryParameters(Object.keys(Ke).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{})):n},getWidgetUiState:function(e,t){var n=t.searchParameters.page||0;return n?W(W({},e),{},{page:n+1}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=e;R&&(r=e.setQueryParameters(Ke));var i=n.page?n.page-1:0;return r.setQueryParameter("page",i)}}}}function wr(s,e){var o=1<arguments.length&&void 0!==e?e:Le;return ke(s,xr()),function(u){var l,d,h,e=u||{},f=e.attribute,t=e.limit,c=void 0===t?10:t,n=e.showMore,m=void 0!==n&&n,r=e.showMoreLimit,p=void 0===r?20:r,i=e.sortBy,g=void 0===i?Nr:i,a=e.transformItems,v=void 0===a?function(e){return e}:a;if(!f)throw new Error(xr("The `attribute` option is required."));if(!0===m&&p<=c)throw new Error(xr("The `showMoreLimit` option must be greater than `limit`."));var y=!1,b=function(){};function S(){b()}function R(){return y?p:c}return{$$type:"ais.menu",init:function(e){var t=e.instantSearchInstance;s(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;s(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return o(),t.removeHierarchicalFacet(f).setQueryParameter("maxValuesPerFacet",void 0)},getRenderState:function(e,t){return W(W({},e),{},{menu:W(W({},e.menu),{},k({},f,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.createURL,r=e.instantSearchInstance,i=e.helper,a=[],s=!1;if(l=l||dt({instantSearchInstance:r,helper:i,attribute:f,widgetType:this.$$type}),d=d||function(e){return n(i.state.resetPage().toggleFacetRefinement(f,e))},h=h||function(e){var t=D(i.getHierarchicalFacetBreadcrumb(f),1)[0];l("click",e||t),i.toggleFacetRefinement(f,e||t).search()},e.results&&(b=function(e,t){return function(){y=!y,t.render(e)}}(e,this)),t){var o=t.getFacetValues(f,{sortBy:g,facetOrdering:g===Nr}),c=o&&!Array.isArray(o)&&o.data?o.data:[];s=m&&(y||c.length>R()),a=v(c.slice(0,R()).map(function(e){var t=e.name,n=e.escapedValue;e.path;return W(W({},j(e,["name","escapedValue","path"])),{},{label:t,value:n})}),{results:t})}return{items:a,createURL:d,refine:h,sendEvent:l,canRefine:0<a.length,widgetParams:u,isShowingMore:y,toggleShowMore:S,canToggleShowMore:s}},getWidgetUiState:function(e,t){var n=D(t.searchParameters.getHierarchicalFacetBreadcrumb(f),1)[0];return n?W(W({},e),{},{menu:W(W({},e.menu),{},k({},f,n))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.menu&&n.menu[f],i=e.removeHierarchicalFacet(f).addHierarchicalFacet({name:f,attributes:[f]}),a=i.maxValuesPerFacet||0,s=Math.max(a,m?p:c),o=i.setQueryParameter("maxValuesPerFacet",s);return r?o.addHierarchicalFacetRefinement(f,r):o.setQueryParameters({hierarchicalFacetsRefinements:W(W({},o.hierarchicalFacetsRefinements),{},k({},f,[]))})}}}}function _r(i,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(i,Ir()),function(s){var e=s||{},t=e.attribute,u=void 0===t?"":t,n=e.items,o=void 0===n?[]:n,r=e.transformItems,c=void 0===r?function(e){return e}:r;if(""===u)throw new Error(Ir("The `attribute` option is required."));if(!o||0===o.length)throw new Error(Ir("The `items` option expects an array of objects."));var l={};return{$$type:Fr,init:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return a(),t.clearRefinements(u)},getWidgetUiState:function(e,t){var n=t.searchParameters.getNumericRefinements(u),r=n["="]&&n["="][0];if(r||0===r)return W(W({},e),{},{numericMenu:W(W({},e.numericMenu),{},k({},u,"".concat(n["="])))});var i=n[">="]&&n[">="][0]||"",a=n["<="]&&n["<="][0]||"";return""===i&&""===a?e:W(W({},e),{},{numericMenu:W(W({},e.numericMenu),{},k({},u,"".concat(i,":").concat(a)))})},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.numericMenu&&n.numericMenu[u],i=e.clearRefinements(u);if(!r)return i.setQueryParameters({numericRefinements:W(W({},i.numericRefinements),{},k({},u,{}))});if(-1===r.indexOf(":"))return i.addNumericRefinement(u,"=",Number(r));var a=D(r.split(":").map(parseFloat),2),s=a[0],o=a[1],c=Oe(s)?i.addNumericRefinement(u,">=",s):i;return Oe(o)?c.addNumericRefinement(u,"<=",o):c},getRenderState:function(e,t){return W(W({},e),{},{numericMenu:W(W({},e.numericMenu),{},k({},u,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.state,r=e.instantSearchInstance,i=e.helper,a=e.createURL;return l.refine||(l.refine=function(e){var t=Cr(i.state,u,e);
12479l.sendEvent("click",e),i.setState(t).search()}),l.createURL||(l.createURL=function(t){return function(e){return a(Cr(t,u,e))}}),l.sendEvent||(l.sendEvent=function(e){var c=e.instantSearchInstance,u=e.helper,l=e.attribute;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;if("click"===r){var o=vt(Cr(u.state,l,i),l);o&&0<o.length&&c.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:Fr,eventType:r,payload:{eventName:s,index:u.getIndex(),filters:o},attribute:l})}}else c.sendEventToInsights(t[0])}}({instantSearchInstance:r,helper:i,attribute:u})),{createURL:l.createURL(n),items:c(function(i){return o.map(function(e){var t=e.start,n=e.end,r=e.label;return{label:r,value:encodeURI(JSON.stringify({start:t,end:n})),isRefined:Tr(i,u,{start:t,end:n,label:r})}})}(n),{results:t}),hasNoResults:!t||0===t.nbHits,refine:l.refine,sendEvent:l.sendEvent,widgetParams:s}}}}}var Pr=Mn(Rr),xr=st({name:"menu",connector:!0}),Nr=["isRefined","name:asc"],Ir=st({name:"numeric-menu",connector:!0}),Fr="ais.numericMenu";function Tr(e,t,n){var r=e.getNumericRefinements(t);return void 0!==n.start&&void 0!==n.end?n.start===n.end?Er(r,"=",n.start):Er(r,">=",n.start)&&Er(r,"<=",n.end):void 0!==n.start?Er(r,">=",n.start):void 0!==n.end?Er(r,"<=",n.end):void 0===n.start&&void 0===n.end&&Object.keys(r).every(function(e){return 0===(r[e]||[]).length})}function Cr(e,t,n){var r=e,i=JSON.parse(decodeURI(n)),a=r.getNumericRefinements(t);if(void 0===i.start&&void 0===i.end)return r.removeNumericRefinement(t);if(Tr(r,t,i)||(r=r.removeNumericRefinement(t)),void 0!==i.start&&void 0!==i.end){if(i.start>i.end)throw new Error("option.start should be > to option.end");if(i.start===i.end)return r=Er(a,"=",i.start)?r.removeNumericRefinement(t,"=",i.start):r.addNumericRefinement(t,"=",i.start)}return void 0!==i.start&&(Er(a,">=",i.start)&&(r=r.removeNumericRefinement(t,">=",i.start)),r=r.addNumericRefinement(t,">=",i.start)),void 0!==i.end&&(Er(a,"<=",i.end)&&(r=r.removeNumericRefinement(t,"<=",i.end)),r=r.addNumericRefinement(t,"<=",i.end)),"number"==typeof r.page&&(r.page=0),r}function Er(e,t,n){return void 0!==e[t]&&e[t].includes(n)}function kr(n,e){var r=1<arguments.length&&void 0!==e?e:Le;return ke(n,jr()),function(o){var e=o||{},c=e.totalPages,t=e.padding,u=new Lr({currentPage:0,total:0,padding:void 0===t?3:t}),l={};return{$$type:"ais.pagination",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return r(),t.setQueryParameter("page",void 0)},getWidgetUiState:function(e,t){var n=t.searchParameters.page||0;return n?W(W({},e),{},{page:n+1}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.page?n.page-1:0;return e.setQueryParameter("page",r)},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.state,i=e.createURL;l.refine||(l.refine=function(e){n.setPage(e),n.search()}),l.createURL||(l.createURL=function(t){return function(e){return i(t.setPage(e))}});var a=r.page||0,s=function(e){var t=e.nbPages;return void 0!==c?Math.min(c,t):t}(t||{nbPages:0});return u.currentPage=a,u.total=s,{createURL:l.createURL(r),refine:l.refine,canRefine:1<s,currentRefinement:a,nbHits:(null==t?void 0:t.nbHits)||0,nbPages:s,pages:t?u.pages():[],isFirstPage:u.isFirstPage(),isLastPage:u.isLastPage(),widgetParams:o}},getRenderState:function(e,t){return W(W({},e),{},{pagination:this.getWidgetRenderState(t)})}}}}var Lr=function(){function t(e){C(this,t),k(this,"currentPage",void 0),k(this,"total",void 0),k(this,"padding",void 0),this.currentPage=e.currentPage,this.total=e.total,this.padding=e.padding}return E(t,[{key:"pages",value:function(){var e=this.total,t=this.currentPage,n=this.padding;if(0===e)return[0];var r=this.nbPagesDisplayed(n,e);if(r===e)return He({end:e});var i=this.calculatePaddingLeft(t,n,e,r);return He({start:t-i,end:t+(r-i)})}},{key:"nbPagesDisplayed",value:function(e,t){return Math.min(2*e+1,t)}},{key:"calculatePaddingLeft",value:function(e,t,n,r){return e<=t?e:n-t<=e?r-(n-e):t}},{key:"isLastPage",value:function(){return this.currentPage===this.total-1||
124790===this.total}},{key:"isFirstPage",value:function(){return 0===this.currentPage}}]),t}(),jr=st({name:"pagination",connector:!0}),Mr=st({name:"range-input",connector:!0},{name:"range-slider",connector:!0}),Or="ais.range";function Ar(e){var t=e.min,n=e.max,r=e.precision,i=Math.pow(10,r);return{min:t?Math.floor(t*i)/i:t,max:n?Math.ceil(n*i)/i:n}}function Hr(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,Mr()),function(o){var e=o||{},t=e.attribute,w=void 0===t?"":t,_=e.min,P=e.max,n=e.precision,x=void 0===n?0:n;if(!w)throw new Error(Mr("The `attribute` option is required."));if(Oe(_)&&Oe(P)&&P<_)throw new Error(Mr("The `max` option can't be lower than `min`."));function f(e,t,n,r){var i,a,s=e.state,o=t.min,c=t.max,u=D(s.getNumericRefinement(w,">=")||[],1)[0],l=D(s.getNumericRefinement(w,"<=")||[],1)[0],d=void 0===n||""===n,h=void 0===r||""===r,f=Ar({min:d?void 0:parseFloat(n),max:h?void 0:parseFloat(r),precision:x}),m=f.min,p=f.max;i=Oe(_)||o!==m?Oe(_)&&d?_:m:void 0,a=Oe(P)||c!==p?Oe(P)&&h?P:p:void 0;var g=void 0===i,v=Oe(o)&&o<=i,y=g||Oe(i)&&(!Oe(o)||v),b=void 0===a,S=Oe(a)&&a<=c,R=b||Oe(a)&&(!Oe(c)||S);return(u!==i||l!==a)&&y&&R?(s=s.removeNumericRefinement(w),Oe(i)&&(s=s.addNumericRefinement(w,">=",i)),Oe(a)&&(s=s.addNumericRefinement(w,"<=",a)),s.resetPage()):null}function m(e,t,n,r){var i=3<arguments.length&&void 0!==r?r:"Filter Applied",a=vt(e,w);a&&0<a.length&&t.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:Or,eventType:"click",payload:{eventName:i,index:n.getIndex(),filters:a},attribute:w})}var c={from:function(e){return e.toLocaleString()},to:function(e){return function(e){return Number(Number(e).toFixed(x))}(e).toLocaleString()}};function u(i,a,s){return function(){var e=D(0<arguments.length&&void 0!==arguments[0]?arguments[0]:[void 0,void 0],2),t=e[0],n=e[1],r=f(a,s,t,n);r&&(m(r,i,a),a.setState(r).search())}}return{$$type:Or,init:function(e){r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!1)},getRenderState:function(e,t){return W(W({},e),{},{range:W(W({},e.range),{},k({},w,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.instantSearchInstance,i=Ie(t&&t.disjunctiveFacets||[],function(e){return e.name===w}),a=function(e){return Ar({min:Oe(_)?_:Oe(e.min)?e.min:0,max:Oe(P)?P:Oe(e.max)?e.max:0,precision:x})}(i&&i.stats||{min:void 0,max:void 0}),s=function(e){var t=D(e.getNumericRefinement(w,">=")||[],1)[0],n=D(e.getNumericRefinement(w,"<=")||[],1)[0];return[Oe(t)?t:-1/0,Oe(n)?n:1/0]}(n);return{refine:u(r,n,t?a:{min:void 0,max:void 0}),canRefine:a.min!==a.max,format:c,range:a,sendEvent:function(l,d,h){return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2];if("click"===r){var s=D(i,2),o=s[0],c=s[1],u=f(d,h,o,c);m(u,l,d,a)}}else l.sendEventToInsights(t[0])}}(r,n,a),widgetParams:W(W({},o),{},{precision:x}),start:s}},dispose:function(e){var t=e.state;return i(),t.removeDisjunctiveFacet(w).removeNumericRefinement(w)},getWidgetUiState:function(e,t){var n=t.searchParameters.getNumericRefinements(w),r=n[">="],i=void 0===r?[]:r,a=n["<="],s=void 0===a?[]:a;return 0===i.length&&0===s.length?e:W(W({},e),{},{range:W(W({},e.range),{},k({},w,"".concat(i,":").concat(s)))})},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=e.addDisjunctiveFacet(w).setQueryParameters({numericRefinements:W(W({},e.numericRefinements),{},k({},w,{}))});Oe(_)&&(r=r.addNumericRefinement(w,">=",_)),Oe(P)&&(r=r.addNumericRefinement(w,"<=",P));var i=n.range&&n.range[w];if(!i||-1===i.indexOf(":"))return r;var a=D(i.split(":").map(parseFloat),2),s=a[0],o=a[1];return Oe(s)&&(!Oe(_)||_<s)&&(r=(r=r.removeNumericRefinement(w,">=")).addNumericRefinement(w,">=",s)),Oe(o)&&(!Oe(P)||o<P)&&(r=(r=r.removeNumericRefinement(w,"<=")).addNumericRefinement(w,"<=",o)),r}}}}function Wr(u,e){var l=1<arguments.length&&void 0!==e?e:Le;return ke(u,Kr()),function(f){var e=f||{},m=e.attribute,t=e.operator,d=void 0===t?"or":t,n=e.limit,p=void 0===n?10:n,r=e.showMore,g=void 0!==r&&r,i=e.showMoreLimit,h=void 0===i?20:i,a=e.sortBy,v=void 0===a?zr:a,s=e.escapeFacetValues,o=void 0===s||s,c=e.transformItems,y=void 0===c?function(e){return e}:c;if(!m)throw new Error(Kr("The `attribute` option is required."));if(!/^(and|or)$/.test(d))throw new Error(Kr('The `operator` must one of: `"and"`, `"or"` (got "'.concat(d,'").')));if(!0===g&&h<=p)throw new Error(Kr("`showMoreLimit` should be greater than `limit`."));function b(e){var t=e.name,n=e.escapedValue;return W(W({},j(e,["name","escapedValue"])),{},{value:n,label:t,highlighted:t})}var S,R,w,_=[],P=!0,x=!1,N=function(){};function I(){N()}function F(){return x?h:p}function T(n,s){return function(a){return function(e){var r=a.instantSearchInstance,i=a.results;if(""===e&&_)u(W(W({},s.getWidgetRenderState(W(W({},a),{},{results:S}))),{},{instantSearchInstance:r}),!1);else{var t={highlightPreTag:o?Ke.highlightPreTag:ze.highlightPreTag,highlightPostTag:o?Ke.highlightPostTag:ze.highlightPostTag};n.searchForFacetValues(m,e,Math.min(F(),100),t).then(function(e){var t=o?function(e){return e.map(function(e){return W(W({},e),{},{highlighted:Je(e.highlighted)})})}(e.facetHits):e.facetHits,n=y(t.map(function(e){var t=e.escapedValue,n=e.value;return W(W({},j(e,["escapedValue","value"])),{},{value:t,label:n})}),{results:i});u(W(W({},s.getWidgetRenderState(W(W({},a),{},{results:S}))),{},{items:n,canToggleShowMore:!1,canRefine:!0,isFromSearch:!0,instantSearchInstance:r}),!1)})}}}}var C=function(){return function(){}};return{$$type:"ais.refinementList",init:function(e){u(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){u(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!1)},getRenderState:function(e,t){return W(W({},e),{},{refinementList:W(W({},e.refinementList),{},k({},m,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.results,n=e.state,r=e.createURL,i=e.instantSearchInstance,a=e.helper,s=[],o=[];if(w&&R&&C||(w=dt({instantSearchInstance:i,helper:a,attribute:m,widgetType:this.$$type}),R=function(e){w("click",e),a.toggleFacetRefinement(m,e).search()},C=T(a,this)),t){var c=t.getFacetValues(m,{sortBy:v,facetOrdering:v===zr});o=c&&Array.isArray(c)?c:[],s=y(o.slice(0,F()).map(b),{results:t});var u=n.maxValuesPerFacet,l=F();P=l<u?o.length<=l:o.length<l,S=t,_=s,e.results&&(N=function(e,t){return function(){x=!x,t.render(e)}}(e,this))}var d=C&&C(e),h=x&&_.length>p||g&&!P;return{createURL:function(e){return r(n.resetPage().toggleFacetRefinement(m,e))},items:s,refine:R,searchForItems:d,isFromSearch:!1,canRefine:0<s.length,widgetParams:f,isShowingMore:x,canToggleShowMore:h,toggleShowMore:I,sendEvent:w,hasExhaustiveItems:P}},dispose:function(e){var t=e.state;l();var n=t.setQueryParameter("maxValuesPerFacet",void 0);return"and"===d?n.removeFacet(m):n.removeDisjunctiveFacet(m)},getWidgetUiState:function(e,t){var n=t.searchParameters,r="or"===d?n.getDisjunctiveRefinements(m):n.getConjunctiveRefinements(m);return r.length?W(W({},e),{},{refinementList:W(W({},e.refinementList),{},k({},m,r))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r="or"===d,i=n.refinementList&&n.refinementList[m],a=e.clearRefinements(m),s=r?a.addDisjunctiveFacet(m):a.addFacet(m),o=s.maxValuesPerFacet||0,c=Math.max(o,g?h:p),u=s.setQueryParameter("maxValuesPerFacet",c);if(i)return i.reduce(function(e,t){return r?e.addDisjunctiveFacetRefinement(m,t):e.addFacetRefinement(m,t)},u);var l=r?"disjunctiveFacetsRefinements":"facetsRefinements";return u.setQueryParameters(k({},l,W(W({},u[l]),{},k({},m,[]))))}}}}function Dr(e,t){return t(e)}function Br(n,e){var r=1<arguments.length&&void 0!==e?e:Le;return ke(n,Jr()),function(i){var a,s,e=(i||{}).queryHook,o=void 0===e?Dr:e;return{$$type:"ais.searchBox",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return r(),t.setQueryParameter("query",void 0)},getRenderState:function(e,t){return W(W({},e),{},{searchBox:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.helper,n=e.searchMetadata,r=e.state;return a||(a=function(e){o(e,function(e){return t.setQuery(e).search()})},s=function(){t.setQuery("").search()}),{query:r.query||"",refine:a,clear:s,widgetParams:i,isSearchStalled:n.isSearchStalled}},getWidgetUiState:function(e,t){var n=t.searchParameters.query||"";return""===n||e&&e.query===n?e:W(W({},e),{},{query:n})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameter("query",n.query||"")}}}}function Ur(i,e){var n=1<arguments.length&&void 0!==e?e:Le;ke(i,Yr());var c={};return function(a){var e=a||{},s=e.items,t=e.transformItems,o=void 0===t?function(e){return e}:t;if(!Array.isArray(s))throw new Error(Yr("The `items` option expects an array of objects."));return{$$type:"ais.sortBy",init:function(e){var t=e.instantSearchInstance,n=this.getWidgetRenderState(e),r=n.currentRefinement;Ie(s,function(e){return e.value===r});i(W(W({},n),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return n(),c.initialIndex?t.setIndex(c.initialIndex):t},getRenderState:function(e,t){return W(W({},e),{},{sortBy:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,r=e.state,i=e.parent;return!c.initialIndex&&i&&(c.initialIndex=i.getIndexName()),c.setIndex||(c.setIndex=function(e){n.setIndex(e).search()}
12479),{currentRefinement:r.index,options:o(s,{results:t}),refine:c.setIndex,hasNoResults:!t||0===t.nbHits,widgetParams:a}},getWidgetUiState:function(e,t){var n=t.searchParameters.index;return W(W({},e),{},{sortBy:n!==c.initialIndex?n:void 0})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameter("index",n.sortBy||c.initialIndex||e.index)}}}}function qr(n,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(n,Xr()),function(d){var h,e=d||{},f=e.attribute,t=e.max,m=void 0===t?5:t;if(!f)throw new Error(Xr("The `attribute` option is required."));function p(e){var t,n=e.getNumericRefinements(f);if(null!==(t=n[">="])&&void 0!==t&&t.length)return n[">="][0]}function r(e,t){var n=p(e)===Number(t),r=e.resetPage().removeNumericRefinement(f);return n?r:r.addNumericRefinement(f,"<=",m).addNumericRefinement(f,">=",Number(t))}var g=function(e){return function(e,t){h("click",t),e.setState(r(e.state,t)).search()}.bind(null,e)},v=function(e){var t=e.state,n=e.createURL;return function(e){return n(r(t,e))}};return{$$type:Gr,init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{ratingMenu:W(W({},e.ratingMenu),{},k({},f,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.helper,n=e.results,r=e.state,i=e.instantSearchInstance,a=e.createURL,s=[];if(h=h||function(e){var o=e.instantSearchInstance,c=e.helper,u=e.getRefinedStar,l=e.attribute;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;if("click"===r)u()===Number(i)||o.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:Gr,eventType:r,payload:{eventName:s,index:c.getIndex(),filters:["".concat(l,">=").concat(i)]},attribute:l})}else o.sendEventToInsights(t[0])}}({instantSearchInstance:i,helper:t,getRefinedStar:function(){return p(t.state)},attribute:f}),n)for(var o=n.getFacetValues(f,{}),c=(o.length,function(e){var r=0;e.forEach(function(e){var t=D(e.name.split("."),2)[1],n=void 0===t?"":t;r=Math.max(r,n.length)})}(o),p(r)),u=function(n){var e=c===n,t=o.filter(function(e){return Number(e.name)>=n&&Number(e.name)<=m}).map(function(e){return e.count}).reduce(function(e,t){return e+t},0);if(c&&!e&&0===t)return"continue";var r=P(new Array(Math.floor(m/1))).map(function(e,t){return 1*t<n});s.push({stars:r,name:String(n),label:String(n),value:String(n),count:t,isRefined:e})},l=1;l<m;l+=1)u(l);return{items:s=s.reverse(),hasNoResults:!n||0===n.nbHits,canRefine:0<s.length,refine:g(t),sendEvent:h,createURL:v({state:r,createURL:a}),widgetParams:d}},dispose:function(e){var t=e.state;return i(),t.removeNumericRefinement(f)},getWidgetUiState:function(e,t){var n=t.searchParameters,r=p(n);return"number"!=typeof r?e:W(W({},e),{},{ratingMenu:W(W({},e.ratingMenu),{},k({},f,r))})},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=n.ratingMenu&&n.ratingMenu[f],i=e.clearRefinements(f).addDisjunctiveFacet(f);return r?i.addNumericRefinement(f,"<=",m).addNumericRefinement(f,">=",r):i.setQueryParameters({numericRefinements:W(W({},i.numericRefinements),{},k({},f,{}))})}}}}function Qr(n,e){var t=1<arguments.length&&void 0!==e?e:Le;return ke(n,Zr()),function(r){return{$$type:"ais.stats",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(){t()},getRenderState:function(e,t){return W(W({},e),{},{stats:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.state;return t?{hitsPerPage:t.hitsPerPage,nbHits:t.nbHits,nbSortedHits:t.nbSortedHits,areHitsSorted:void 0!==t.appliedRelevancyStrictness&&0<t.appliedRelevancyStrictness&&t.nbSortedHits!==t.nbHits,nbPages:t.nbPages,page:t.page,processingTimeMS:t.processingTimeMS,query:t.query,widgetParams:r}:{hitsPerPage:n.hitsPerPage,nbHits:0,nbSortedHits:void 0,areHitsSorted:!1,nbPages:0,page:n.page||0,processingTimeMS:-1,query:n.query||"",widgetParams:r}}}}}function Vr(i,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(i,ei()),function(m){var e=m||{},p=e.attribute,t=e.on,n=void 0===t||t,r=e.off;if(!p)throw new Error(ei("The `attribute` option is required."));var g,v=void 0!==r,y=at(n).map(Fe),b=v?at(r).map(Fe):void 0,S=function(n,e){var r=e.state,i=e.createURL;return function(){r=r.resetPage();var e=n?y:b;e&&e.forEach(function(e){r=r.removeDisjunctiveFacetRefinement(p,e)});var t=n?b:y;return t&&t.forEach(function(e){r=r.addDisjunctiveFacetRefinement(p,e)}),i(r)}};return{$$type:ti,init:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;i(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return a(),t.removeDisjunctiveFacet(p)},getRenderState:function(e,t){return W(W({},e),{},{toggleRefinement:W(W({},e.toggleRefinement),{},k({},p,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.state,n=e.helper,r=e.results,i=e.createURL,a=e.instantSearchInstance,s=r?y.every(function(e){return t.isDisjunctiveFacetRefined(p,e)}):y.every(function(e){return t.isDisjunctiveFacetRefined(p,e)}),o={isRefined:s,count:0},c={isRefined:v&&!s,count:0};if(r){var u=at(b||!1),l=r.getFacetValues(p,{})||[],d=y.map(function(t){return Ie(l,function(e){return e.escapedValue===Fe(String(t))})}).filter(function(e){return void 0!==e}),h=v?u.map(function(t){return Ie(l,function(e){return e.escapedValue===Fe(String(t))})}).filter(function(e){return void 0!==e}):[];o={isRefined:!!d.length&&d.every(function(e){return e.isRefined}),count:d.reduce(function(e,t){return e+t.count},0)||null},c={isRefined:!!h.length&&h.every(function(e){return e.isRefined}),count:h.reduce(function(e,t){return e+t.count},0)||l.reduce(function(e,t){return e+t.count},0)}}g=g||function(e){var o=e.instantSearchInstance,c=e.helper,u=e.attribute,l=e.on;return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1!==t.length){var r=t[0],i=t[1],a=t[2],s=void 0===a?"Filter Applied":a;"click"===r&&void 0!==l&&(i||o.sendEventToInsights({insightsMethod:"clickedFilters",widgetType:ti,eventType:r,payload:{eventName:s,index:c.getIndex(),filters:l.map(function(e){return"".concat(u,":").concat(e)})},attribute:u}))}else o.sendEventToInsights(t[0])}}({instantSearchInstance:a,attribute:p,on:y,helper:n});var f=s?c:o;return{value:{name:p,isRefined:s,count:r?f.count:null,onFacetValue:o,offFacetValue:c},createURL:S(s,{state:t,createURL:i}),sendEvent:g,canRefine:Boolean(r?f.count:null),refine:function(t){return function(){var e=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{isRefined:!1}).isRefined;e?(y.forEach(function(e){return t.removeDisjunctiveFacetRefinement(p,e)}),v&&b.forEach(function(e){return t.addDisjunctiveFacetRefinement(p,e)})):(g("click",e),v&&b.forEach(function(e){return t.removeDisjunctiveFacetRefinement(p,e)}
12479),y.forEach(function(e){return t.addDisjunctiveFacetRefinement(p,e)})),t.search()}}(n),widgetParams:m}},getWidgetUiState:function(e,t){var n=t.searchParameters,r=y&&y.every(function(e){return n.isDisjunctiveFacetRefined(p,e)});return r?W(W({},e),{},{toggle:W(W({},e.toggle),{},k({},p,r))}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState,r=e.clearRefinements(p).addDisjunctiveFacet(p);return Boolean(n.toggle&&n.toggle[p])?(y&&y.forEach(function(e){r=r.addDisjunctiveFacetRefinement(p,e)}),r):v?(b&&b.forEach(function(e){r=r.addDisjunctiveFacetRefinement(p,e)}),r):r.setQueryParameters({disjunctiveFacetsRefinements:W(W({},e.disjunctiveFacetsRefinements),{},k({},p,[]))})}}}}function $r(d,e){var h=1<arguments.length&&void 0!==e?e:Le;ke(d,ni());var f={};return function(s){var e=s||{},t=e.attributes,n=e.separator,r=void 0===n?" > ":n,i=e.rootPath,a=void 0===i?null:i,o=e.transformItems,c=void 0===o?function(e){return e}:o;if(!t||!Array.isArray(t)||0===t.length)throw new Error(ni("The `attributes` option expects an array of strings."));var u=D(t,1)[0];function l(e,t){if(t)return e.resetPage().toggleFacetRefinement(u,t);var n=e.getHierarchicalFacetBreadcrumb(u);return 0===n.length?e:e.resetPage().toggleFacetRefinement(u,n[0])}return{$$type:"ais.breadcrumb",init:function(e){d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(e){d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!1)},dispose:function(){h()},getRenderState:function(e,t){return W(W({},e),{},{breadcrumb:W(W({},e.breadcrumb),{},k({},u,this.getWidgetRenderState(t)))})},getWidgetRenderState:function(e){var t=e.helper,n=e.createURL,r=e.results,i=e.state;var a=function(){if(!r||0===i.hierarchicalFacets.length)return[];var e=D(i.hierarchicalFacets,1)[0].name,t=r.getFacetValues(e,{}),n=Array.isArray(t.data)?t.data:[];return c(function(n){return n.map(function(e,t){return{label:e.label,value:t+1===n.length?null:n[t+1].value}})}(function n(e){return e.reduce(function(e,t){return t.isRefined&&(e.push({label:t.name,value:t.escapedValue}),Array.isArray(t.data)&&(e=e.concat(n(t.data)))),e},[])}(n)),{results:r})}();return f.createURL||(f.createURL=function(e){return n(l(t.state,e))}),f.refine||(f.refine=function(e){t.setState(l(t.state,e)).search()}),{canRefine:0<a.length,createURL:f.createURL,items:a,refine:f.refine,widgetParams:s}},getWidgetSearchParameters:function(e){if(e.isHierarchicalFacet(u)){e.getHierarchicalFacetByName(u);return e}return e.addHierarchicalFacet({name:u,attributes:t,separator:r,rootPath:a})}}}}var Kr=st({name:"refinement-list",connector:!0}),zr=["isRefined","count:desc","name:asc"],Jr=st({name:"search-box",connector:!0}),Yr=st({name:"sort-by",connector:!0}),Xr=st({name:"rating-menu",connector:!0}),Gr="ais.ratingMenu",Zr=st({name:"stats",connector:!0}),ei=st({name:"toggle-refinement",connector:!0}),ti="ais.toggleRefinement",ni=st({name:"breadcrumb",connector:!0});var ri=st({name:"geo-search",connector:!0});function ii(e){return e.insideBoundingBox||""}function ai(e,t){return e.setQueryParameter("insideBoundingBox",t)}function si(v,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(v,ri()),function(s){function o(e){return e.aroundLatLng?function(e){var t=e.match(ot);if(!t)throw new Error('Invalid value for "aroundLatLng" parameter: "'.concat(e,'"'));return{lat:parseFloat(t[1]),lng:parseFloat(t[2])}}(e.aroundLatLng):void 0}function c(){return g.internalToggleRefineOnMapMove()}function u(e,t){return function(){g.isRefineOnMapMove=!g.isRefineOnMapMove,t(e)}}function l(){return g.isRefineOnMapMove}function d(){return g.internalSetMapMoveSinceLastRefine()}function h(t,n){return function(){var e=!0!==g.hasMapMoveSinceLastRefine;g.hasMapMoveSinceLastRefine=!0,e&&n(t)}}function f(){return g.hasMapMoveSinceLastRefine}var m,e=s||{},t=e.enableRefineOnMapMove,n=void 0===t||t,r=e.transformItems,p=void 0===r?function(e){return e}:r,g={isRefineOnMapMove:n,hasMapMoveSinceLastRefine:!1,lastRefinePosition:"",lastRefineBoundingBox:"",internalToggleRefineOnMapMove:Le,internalSetMapMoveSinceLastRefine:Le};return{$$type:ci,init:function(e){var t=e.instantSearchInstance;g.internalToggleRefineOnMapMove=u(e,Le),g.internalSetMapMoveSinceLastRefine=h(e,Le),v(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.helper,n=e.instantSearchInstance,r=t.state,i=Boolean(r.aroundLatLng)&&Boolean(g.lastRefinePosition)&&r.aroundLatLng!==g.lastRefinePosition,a=!r.insideBoundingBox&&Boolean(g.lastRefineBoundingBox)&&r.insideBoundingBox!==g.lastRefineBoundingBox;(i||a)&&(g.hasMapMoveSinceLastRefine=!1),g.lastRefinePosition=r.aroundLatLng||"",g.lastRefineBoundingBox=ii(r),g.internalToggleRefineOnMapMove=u(e,this.render.bind(this)),g.internalSetMapMoveSinceLastRefine=h(e,this.render.bind(this));var s=this.getWidgetRenderState(e);m("view",s.items),v(W(W({},s),{},{instantSearchInstance:n}),!1)},getWidgetRenderState:function(e){var t=e.helper,n=e.results,r=e.instantSearchInstance,i=t.state,a=n?p(n.hits.filter(function(e){return e._geoloc}),{results:n}):[];return m=m||pt({instantSearchInstance:r,index:t.getIndex(),widgetType:ci}),{items:a,position:o(i),currentRefinement:function(e){return e.insideBoundingBox&&ct(e.insideBoundingBox)}(i),refine:function(i){return function(e){var t=e.northEast,n=e.southWest,r=[t.lat,t.lng,n.lat,n.lng].join();i.setState(ai(i.state,r).resetPage()).search(),g.hasMapMoveSinceLastRefine=!1,g.lastRefineBoundingBox=r}}(t),sendEvent:m,clearMapRefinement:function(e){return function(){e.setQueryParameter("insideBoundingBox",void 0).search()}}
12479(t),isRefinedWithMap:function(e){return function(){return Boolean(e.insideBoundingBox)}}(i),toggleRefineOnMapMove:c,isRefineOnMapMove:l,setMapMoveSinceLastRefine:d,hasMapMoveSinceLastRefine:f,widgetParams:s}},getRenderState:function(e,t){return W(W({},e),{},{geoSearch:this.getWidgetRenderState(t)})},dispose:function(e){var t=e.state;return i(),t.setQueryParameter("insideBoundingBox",void 0)},getWidgetUiState:function(e,t){var n=ii(t.searchParameters);return!n||e&&e.geoSearch&&e.geoSearch.boundingBox===n?e:W(W({},e),{},{geoSearch:{boundingBox:n}})},getWidgetSearchParameters:function(e,t){var n=t.uiState;return n&&n.geoSearch?ai(e,n.geoSearch.boundingBox):e.setQueryParameter("insideBoundingBox",void 0)}}}}function oi(r,e){var i=1<arguments.length&&void 0!==e?e:Le;ke(r,ui());var a="https://www.algolia.com/?utm_source=instantsearch.js&utm_medium=website&"+"utm_content=".concat(St(function(e){var t;return(null===(t=e.window.location)||void 0===t?void 0:t.hostname)||""},{fallback:function(){return""}}),"&")+"utm_campaign=poweredby";return function(e){var t=(e||{}).url,n=void 0===t?a:t;return{$$type:"ais.poweredBy",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{poweredBy:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{url:n,widgetParams:e}},dispose:function(){i()}}}}var ci="ais.geoSearch",ui=st({name:"powered-by",connector:!0}),li=st({name:"configure",connector:!0});function di(e,t){return e.setQueryParameters(Object.keys(t.searchParameters).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{}))}function hi(e,t){var r=0<arguments.length&&void 0!==e?e:Le,a=1<arguments.length&&void 0!==t?t:Le;return function(i){if(!i||!Ae(i.searchParameters))throw new Error(li("The `searchParameters` option expects an object."));var n={};return{$$type:"ais.configure",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return a(),di(t,i)},getRenderState:function(e,t){var n,r=this.getWidgetRenderState(t);return W(W({},e),{},{configure:W(W({},r),{},{widgetParams:W(W({},r.widgetParams),{},{searchParameters:it(new pe.SearchParameters(null===(n=e.configure)||void 0===n?void 0:n.widgetParams.searchParameters),new pe.SearchParameters(r.widgetParams.searchParameters)).getQueryParams()})})})},getWidgetRenderState:function(e){var t=e.helper;return n.refine||(n.refine=function(r){return function(e){var t=di(r.state,i),n=it(t,new pe.SearchParameters(e));i.searchParameters=e,r.setState(n).search()}}(t)),{refine:n.refine,widgetParams:i}},getWidgetSearchParameters:function(e,t){var n=t.uiState;return it(e,new pe.SearchParameters(W(W({},n.configure),i.searchParameters)))},getWidgetUiState:function(e){return W(W({},e),{},{configure:W(W({},e.configure),i.searchParameters)})}}}}var fi=st({name:"configure-related-items",connector:!0});function mi(e){var t=e.attributeName,n=e.attributeValue,r=e.attributeScore;return"".concat(t,":").concat(n,"<score=").concat(r||1,">")}function pi(c,u){return function(e){var t=e||{},a=t.hit,s=t.matchingPatterns,n=t.transformSearchParameters,r=void 0===n?function(e){return e}:n;if(!a)throw new Error(fi("The `hit` option is required."));if(!s)throw new Error(fi("The `matchingPatterns` option is required."));var i=Object.keys(s).reduce(function(e,t){var n=s[t],r=Me(a,t),i=n.score;return Array.isArray(r)?[].concat(P(e),[r.map(function(e){return mi({attributeName:t,attributeValue:e,attributeScore:i})})]):"string"==typeof r?[].concat(P(e),[mi({attributeName:t,attributeValue:r,attributeScore:i})]):e},[]),o=W({},r(new pe.SearchParameters({sumOrFiltersScores:!0,facetFilters:["objectID:-".concat(a.objectID)],optionalFilters:i})));return W(W({},hi(c,u)({searchParameters:o})),{},{$$type:"ais.configureRelatedItems"})}}var gi=st({name:"autocomplete",connector:!0}),vi=st({name:"query-rules",connector:!0});function yi(e){var t=this.helper,n=this.initialRuleContexts,r=this.trackedFilters,i=this.transformRuleContexts,a=e.state,s=a.ruleContexts||[],o=function(e){var i=e.helper,a=e.sharedHelperState,s=e.trackedFilters;return Object.keys(s).reduce(function(e,t){var n=Ce(i.lastResults||{},a,!0).filter(function(e){return e.attribute===t}).map(function(e){return e.numericValue||e.name}),r=(0,s[t])(n);return[].concat(P(e),P(n.filter(function(e){return r.includes(e)}).map(function(e){return function(e){return e.replace(/[^a-z0-9-_]+/gi,"_")}("ais-".concat(t,"-").concat(e))})))},[])}({helper:t,sharedHelperState:a,trackedFilters:r}),c=i([].concat(P(n),P(o))).slice(0,10);De(s,c)||t.overrideStateWithoutTriggeringChangeEvent(W(W({},a),{},{ruleContexts:c}))}function bi(d,e){var h=1<arguments.length&&void 0!==e?e:Le;return ke(d,vi()),function(i){var e=i||{},t=e.trackedFilters,a=void 0===t?{}:t,n=e.transformRuleContexts,s=void 0===n?function(e){return e}:n,r=e.transformItems,o=void 0===r?function(e){return e}:r;
12479Object.keys(a).forEach(function(e){if("function"!=typeof a[e])throw new Error(vi("'The \"".concat(e,'" filter value in the `trackedFilters` option expects a function.')))});var c,u=0<Object.keys(a).length,l=[];return{$$type:"ais.queryRules",init:function(e){var t=e.helper,n=e.state,r=e.instantSearchInstance;l=n.ruleContexts||[],c=yi.bind({helper:t,initialRuleContexts:l,trackedFilters:a,transformRuleContexts:s}),u&&((function(e){return[e.disjunctiveFacetsRefinements,e.facetsRefinements,e.hierarchicalFacetsRefinements,e.numericRefinements].some(function(e){return Boolean(e&&0<Object.keys(e).length)})}(n)||Boolean(i.transformRuleContexts))&&c({state:n}),t.on("change",c)),d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:r}),!0)},render:function(e){var t=e.instantSearchInstance;d(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getWidgetRenderState:function(e){var t=e.results,n=(t||{}).userData;return{items:o(void 0===n?[]:n,{results:t}),widgetParams:i}},getRenderState:function(e,t){return W(W({},e),{},{queryRules:this.getWidgetRenderState(t)})},dispose:function(e){var t=e.helper,n=e.state;return h(),u?(t.removeListener("change",c),n.setQueryParameter("ruleContexts",l)):n}}}}function Si(e){function t(e){return{status:e,transcript:"",isSpeechFinal:!1,errorCode:void 0}}function n(e){var t=0<arguments.length&&void 0!==e?e:{};p=W(W({},p),t),f()}function r(e){n(t(0<arguments.length&&void 0!==e?e:"initial"))}function i(){n({status:"waiting"})}function a(e){n({status:"error",errorCode:e.error})}function s(e){n({status:"recognizing",transcript:e.results[0]&&e.results[0][0]&&e.results[0][0].transcript||"",isSpeechFinal:e.results[0]&&e.results[0].isFinal}),l&&p.transcript&&h(p.transcript)}function o(){p.errorCode||!p.transcript||l||h(p.transcript),"error"!==p.status&&n({status:"finished"})}function c(){u&&(u.stop(),u.removeEventListener("start",i),u.removeEventListener("error",a),u.removeEventListener("result",s),u.removeEventListener("end",o),u=void 0)}var u,l=e.searchAsYouSpeak,d=e.language,h=e.onQueryChange,f=e.onStateChange,m=window.webkitSpeechRecognition||window.SpeechRecognition,p=t("initial");return{getState:function(){return p},isBrowserSupported:function(){return Boolean(m)},isListening:function(){return"askingPermission"===p.status||"waiting"===p.status||"recognizing"===p.status},startListening:function(){(u=new m)&&(r("askingPermission"),u.interimResults=!0,d&&(u.lang=d),u.addEventListener("start",i),u.addEventListener("error",a),u.addEventListener("result",s),u.addEventListener("end",o),u.start())},stopListening:function(){c(),r("finished")},dispose:c}}function Ri(p,e){var a=1<arguments.length&&void 0!==e?e:Le;return ke(p,wi()),function(l){var e=l.searchAsYouSpeak,d=void 0!==e&&e,h=l.language,f=l.additionalQueryParameters,t=l.createVoiceSearchHelper,m=void 0===t?Si:t;return{$$type:"ais.voiceSearch",init:function(e){var t=e.instantSearchInstance;p(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;p(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{voiceSearch:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=this,n=e.helper,r=e.instantSearchInstance;this._refine||(this._refine=function(e){if(e!==n.state.query){var t=h?[h.split("-")[0]]:void 0;n.setQueryParameter("queryLanguages",t),"function"==typeof f&&n.setState(n.state.setQueryParameters(W({ignorePlurals:!0,removeStopWords:!0,optionalWords:e},f({query:e})))),n.setQuery(e).search()}}),this._voiceSearchHelper||(this._voiceSearchHelper=m({searchAsYouSpeak:d,language:h,onQueryChange:function(e){return t._refine(e)},onStateChange:function(){p(W(W({},t.getWidgetRenderState(e)),{},{instantSearchInstance:r}),!1)}}));var i=this._voiceSearchHelper,a=i.isBrowserSupported,s=i.isListening,o=i.startListening,c=i.stopListening,u=i.getState;return{isBrowserSupported:a(),isListening:s(),toggleListening:function(){a()&&(s()?c():o())},voiceListeningState:u(),widgetParams:l}},dispose:function(e){var t=e.state;
12479this._voiceSearchHelper.dispose(),a();var n=t;if("function"==typeof f){var r=f({query:""}),i=r?Object.keys(r).reduce(function(e,t){return e[t]=void 0,e},{}):{};n=t.setQueryParameters(W({queryLanguages:void 0,ignorePlurals:void 0,removeStopWords:void 0,optionalWords:void 0},i))}return n.setQueryParameter("query",void 0)},getWidgetUiState:function(e,t){var n=t.searchParameters.query||"";return n?W(W({},e),{},{query:n}):e},getWidgetSearchParameters:function(e,t){var n=t.uiState;return e.setQueryParameter("query",n.query||"")}}}}var wi=st({name:"voice-search",connector:!0});function _i(b,e){var S=1<arguments.length&&void 0!==e?e:Le;return ke(b,Ni()),function(e){var t=e||{},i=t.queryLanguages,a=t.attributesForPrediction,n=t.nbHits,s=void 0===n?1:n,r=t.renderDebounceTime,o=void 0===r?100:r,c=t.searchDebounceTime,u=void 0===c?100:c,l=t.escapeHTML,d=void 0===l||l,h=t.extraParameters,f=void 0===h?{}:h;if(!i||0===i.length)throw new Error(Ni("The `queryLanguages` expects an array of strings."));var m,p=function(){var n=-1,r=-1,i=void 0;return function(e){var t=++n;return Promise.resolve(e).then(function(e){return i&&t<r?i:(r=t,i=e)})}}(),g=[],v=!1,y=yt(b,o);return{$$type:"ais.answers",init:function(e){var t=e.state,n=e.instantSearchInstance.client.initIndex(t.index);if(!function(e){return"function"==typeof e.findAnswers}(n))throw new Error(Ni("`algoliasearch` >= 4.8.0 required."));
12479m=yt(n.findAnswers,u),b(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:e.instantSearchInstance}),!0)},render:function(n){var r=this,e=n.state.query;if(!e)return v=!(g=[]),void b(W(W({},this.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!1);g=[],v=!0,b(W(W({},this.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!1),p(m(e,i,W(W({},f),{},{nbHits:s,attributesForPrediction:a}))).then(function(e){if(e){d&&0<e.hits.length&&(e.hits=Xe(e.hits));var t=lt(ut(e.hits,0,s),e.queryID);g=t,v=!1,y(W(W({},r.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!1)}})},getRenderState:function(e,t){return W(W({},e),{},{answers:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{hits:g,isLoading:v,widgetParams:e}},dispose:function(e){var t=e.state;return S(),t},getWidgetSearchParameters:function(e){return e}}}}function Pi(e,t){var n=0<arguments.length&&void 0!==e?e:Le,r=1<arguments.length&&void 0!==t?t:Le;return function(a){var s={};return{$$type:"ais.relevantSort",init:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance;n(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!1)},dispose:function(e){var t=e.state;return r(),t.setQueryParameter("relevancyStrictness",void 0)},getRenderState:function(e,t){return W(W({},e),{},{relevantSort:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t=e.results,n=e.helper;s.refine||(s.refine=function(e){n.setQueryParameter("relevancyStrictness",e).search()});var r=(t||{}).appliedRelevancyStrictness,i=void 0!==r;return{isRelevantSorted:void 0!==r&&0<r,isVirtualReplica:i,canRefine:i,refine:s.refine,widgetParams:a}},getWidgetSearchParameters:function(e,t){var n,r=t.uiState;return e.setQueryParameter("relevancyStrictness",null!==(n=r.relevantSort)&&void 0!==n?n:e.relevancyStrictness)},getWidgetUiState:function(e,t){var n=t.searchParameters;return W(W({},e),{},{relevantSort:n.relevancyStrictness||e.relevantSort})}}}}function xi(d,e){var s=1<arguments.length&&void 0!==e?e:Le;return ke(d,Ii()),function(o){var e=o.widgets,t=o.maxValuesPerFacet,n=void 0===t?20:t,r=o.facets,i=void 0===r?["*"]:r,a=o.transformItems,c=void 0===a?function(e){return e}:a,u=o.fallbackWidget;if(!(e&&Array.isArray(e)&&e.every(function(e){return"object"===f(e)}
12479)))throw new Error(Ii("The `widgets` option expects an array of widgets."));if(!(Array.isArray(i)&&i.length<=1)||"*"!==i[0]&&void 0!==i[0])throw new Error(Ii('The `facets` option only accepts [] or ["*"], you passed '.concat(JSON.stringify(i))));var l=new Map;return{$$type:"ais.dynamicWidgets",init:function(n){e.forEach(function(e){var t=bt(e,n);l.set(t,{widget:e,isMounted:!1})}),d(W(W({},this.getWidgetRenderState(n)),{},{instantSearchInstance:n.instantSearchInstance}),!0)},render:function(e){var t=e.parent,a=this.getWidgetRenderState(e),s=[],o=[];u&&a.attributesToRender.forEach(function(e){if(!l.has(e)){var t=u({attribute:e});l.set(e,{widget:t,isMounted:!1})}}),l.forEach(function(e,t){var n=e.widget,r=e.isMounted,i=-1<a.attributesToRender.indexOf(t);!r&&i?(o.push(n),l.set(t,{widget:n,isMounted:!0})):r&&!i&&(s.push(n),l.set(t,{widget:n,isMounted:!1}))}),t.addWidgets(o),setTimeout(function(){return t.removeWidgets(s)},0),d(W(W({},a),{},{instantSearchInstance:e.instantSearchInstance}),!1)},dispose:function(e){var t=e.parent,n=[];l.forEach(function(e){var t=e.widget;e.isMounted&&n.push(t)}),t.removeWidgets(n),s()},getWidgetSearchParameters:function(e){return i.reduce(function(e,t){return e.addFacet(t)},e.setQueryParameters({maxValuesPerFacet:Math.max(n||0,e.maxValuesPerFacet||0)}))},getRenderState:function(e,t){return W(W({},e),{},{dynamicWidgets:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var t,n,r,i,a=e.results;e.state;if(!a)return{attributesToRender:[],widgetParams:o};var s=c(null!==(t=null===(n=a.renderingContent)||void 0===n?void 0:null===(r=n.facetOrdering)||void 0===r?void 0:null===(i=r.facets)||void 0===i?void 0:i.order)&&void 0!==t?t:[],{results:a});if(!Array.isArray(s))throw new Error(Ii("The `transformItems` option expects a function that returns an Array."));return{attributesToRender:s,widgetParams:o}}}}}var Ni=st({name:"answers",connector:!0}),Ii=st({name:"dynamic-widgets",connector:!0}),Fi=je(xi),Ti=Object.freeze({__proto__:null,connectDynamicWidgets:xi,EXPERIMENTAL_connectDynamicWidgets:Fi,connectClearRefinements:Sn,connectCurrentRefinements:_n,connectHierarchicalMenu:Tn,connectHits:Cn,connectHitsWithInsights:vr,connectHitsPerPage:gr,connectInfiniteHits:Rr,connectInfiniteHitsWithInsights:Pr,connectMenu:wr,connectNumericMenu:_r,connectPagination:kr,connectRange:Hr,connectRefinementList:Wr,connectSearchBox:Br,connectSortBy:Ur,connectRatingMenu:qr,connectStats:Qr,connectToggleRefinement:Vr,connectBreadcrumb:$r,connectGeoSearch:si,connectPoweredBy:oi,connectConfigure:hi,EXPERIMENTAL_connectConfigureRelatedItems:pi,connectAutocomplete:function(r,e){var i=1<arguments.length&&void 0!==e?e:Le;return ke(r,gi()),function(o){var e=(o||{}).escapeHTML,c=void 0===e||e,u={};return{$$type:"ais.autocomplete",init:function(e){var t=e.instantSearchInstance;r(W(W({},this.getWidgetRenderState(e)),{},{instantSearchInstance:t}),!0)},render:function(e){var t=e.instantSearchInstance,n=this.getWidgetRenderState(e);n.indices.forEach(function(e){(0,e.sendEvent)("view",e.hits)}),r(W(W({},n),{},{instantSearchInstance:t}),!1)},getRenderState:function(e,t){return W(W({},e),{},{autocomplete:this.getWidgetRenderState(t)})},getWidgetRenderState:function(e){var n=this,t=e.helper,r=e.state,i=e.scopedResults,a=e.instantSearchInstance;u.refine||(u.refine=function(e){t.setQuery(e).search()});var s=i.map(function(e){e.results.hits=c?Xe(e.results.hits):e.results.hits;var t=pt({instantSearchInstance:a,index:e.results.index,widgetType:n.$$type});return{indexId:e.indexId,indexName:e.results.index,hits:e.results.hits,results:e.results,sendEvent:t}});return{currentRefinement:r.query||"",indices:s,refine:u.refine,widgetParams:o}},getWidgetUiState:function(e,t){var n=t.searchParameters.query||"";return""===n||e&&e.query===n?e:W(W({},e),{},{query:n})},getWidgetSearchParameters:function(e,t){var n={query:t.uiState.query||""};return c?e.setQueryParameters(W(W({},n),Ke)):e.setQueryParameters(n)},dispose:function(e){var t=e.state;i();var n=t.setQueryParameter("query",void 0);return c?n.setQueryParameters(Object.keys(Ke).reduce(function(e,t){return W(W({},e),{},k({},t,void 0))},{})):n}}}},connectQueryRules:bi,connectVoiceSearch:Ri,EXPERIMENTAL_connectAnswers:_i,connectRelevantSort:Pi}),Ci=st({name:"analytics"}),Ei=we(function(e){function s(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var r=typeof n;if("string"==r||"number"==r)e.push(n);else if(Array.isArray(n)&&n.length){var i=s.apply(null,n);i&&e.push(i)}else if("object"==r)for(var a in n)o.call(n,a)&&n[a]&&e.push(a)}}return e.join(" ")}var o;o={}.hasOwnProperty,e.exports?(s.default=s,e.exports=s):window.classNames=s}),ki=function(){L(t,Yn);var e=O(t);function t(){return C(this,t),e.apply(this,arguments)}return E(t,[{key:"shouldComponentUpdate",value:function(e){return!De(this.props.data,e.data)||this.props.templateKey!==e.templateKey||!De(this.props.rootProps,e.rootProps)}},{key:"render",value:function(){var e=this.props.rootTagName,t=this.props.useCustomCompileOptions[this.props.templateKey]?this.props.templatesConfig.compileOptions:{},n=Ne({templates:this.props.templates,templateKey:this.props.templateKey,compileOptions:t,helpers:this.props.templatesConfig.helpers,data:this.props.data,bindEvent:this.props.bindEvent});return null===n?null:Kn(e,h({},this.props.rootProps,{dangerouslySetInnerHTML:{__html:n}}))}}]),t}();k(ki,"defaultProps",{data:{},rootTagName:"div",useCustomCompileOptions:{},templates:{},templatesConfig:{}});
12479function Li(e){var r=e.items,i=e.cssClasses,a=e.templateProps,s=e.createURL,o=e.refine;return Kn("div",{className:Ei(i.root,k({},i.noRefinementRoot,0===r.length))},Kn("ul",{className:i.list},Kn("li",{className:Ei(i.item,k({},i.selectedItem,0===r.length))},Kn(ki,h({},a,{templateKey:"home",rootTagName:"a",rootProps:{className:i.link,href:s(void 0),onClick:function(e){e.preventDefault(),o(void 0)}}}))),r.map(function(t,e){var n=e===r.length-1;return Kn("li",{key:t.label+e,className:Ei(i.item,k({},i.selectedItem,n))},Kn(ki,h({},a,{templateKey:"separator",rootTagName:"span",rootProps:{className:i.separator,"aria-hidden":!0}})),n?t.label:Kn("a",{className:i.link,href:s(t.value),onClick:function(e){e.preventDefault(),o(t.value)}},t.label))})))}function ji(e){var t=e.hasRefinements,n=e.refine,r=e.cssClasses,i=e.templateProps;return Kn("div",{className:r.root},Kn(ki,h({},i,{templateKey:"resetLabel",rootTagName:"button",rootProps:{className:Ei(r.button,k({},r.disabledButton,!t)),onClick:n,disabled:!t},data:{hasRefinements:t}})))}function Mi(e){var t=e.items,n=e.cssClasses;return Kn("div",{className:n.root},Kn("ul",{className:n.list},t.map(function(t,e){return Kn("li",{key:"".concat(t.indexName,"-").concat(t.attribute,"-").concat(e),className:n.item},Kn("span",{className:n.label},function(e){return e.toString().charAt(0).toUpperCase()+e.toString().slice(1)}(t.label),":"),t.refinements.map(function(e){return Kn("span",{key:function(e){var t=e.attribute,n=e.value;return[t,e.type,n,e.operator].map(function(e){return e}).filter(Boolean).join(":")}(e),className:n.category},Kn("span",{className:n.categoryLabel},"query"===e.attribute?Kn("q",null,e.label):e.label),Kn("button",{className:n.delete,onClick:function(t){return function(e){be(e)||(e.preventDefault(),t())}}(t.refine.bind(null,e))},"✕"))}))})))}function Oi(e,t){var n=e.items,r=e.widgetParams;if(!t){var i=r,a=i.container,s=i.cssClasses;fr(Kn(Mi,{cssClasses:s,items:n}),a)}}function Ai(e){var t=e.hits,n=e.isLoading,r=e.cssClasses,i=e.templateProps;return Kn("div",{className:Ei(r.root,k({},r.emptyRoot,0===t.length))},Kn(ki,h({},i,{templateKey:"header",rootProps:{className:r.header},data:{hits:t,isLoading:n}})),n?Kn(ki,h({},i,{templateKey:"loader",rootProps:{className:r.loader}})):Kn("ul",{className:r.list},t.map(function(e,t){return Kn(ki,h({},i,{templateKey:"item",rootTagName:"li",rootProps:{className:r.item},key:e.objectID,data:W(W({},e),{},{__hitIndex:t})}))})))}var Hi={home:"Home",separator:">"},Wi=st({name:"breadcrumb"}),Di=Ft("Breadcrumb"),Bi={resetLabel:"Clear refinements"},Ui=st({name:"clear-refinements"}),qi=Ft("ClearRefinements"),Qi=st({name:"current-refinements"}),Vi=Ft("CurrentRefinements"),$i={header:"",loader:"",item:function(e){return JSON.stringify(e)}},Ki=st({name:"answers"}),zi=Ft("Answers"),Ji=st({name:"dynamic-widgets"}),Yi=Ft("DynamicWidgets");function Xi(e){var t=document.createElement("div");return t.className=Yi({descendantName:"widget"}),e.appendChild(t),t}function Gi(e){var t=e||{},n=t.container,r=t.widgets,i=t.fallbackWidget,a=j(t,["container","widgets","fallbackWidget"]);if(!n)throw new Error(Ji("The `container` option is required."));if(!(r&&Array.isArray(r)&&r.every(function(e){return"function"==typeof e})))throw new Error(Ji("The `widgets` option expects an array of callbacks."));var s=ye(n),o=document.createElement("div");o.className=Yi();var c=new Map,u=[],l=xi(function(e,t){var n=e.attributesToRender;t&&s.appendChild(o),n.forEach(function(e){if(c.has(e)){var t=c.get(e);o.appendChild(t)}})},function(){s.removeChild(o)})(W(W({},a),{},{widgets:u,fallbackWidget:"function"==typeof i?function(e){var t=e.attribute,n=Xi(o);return c.set(t,n),i({attribute:t,container:n})}:void 0}));return W(W({},l),{},{init:function(i){r.forEach(function(e){var t=Xi(o),n=e(t),r=bt(n,i);c.set(r,t),u.push(n)}),l.init(i)},$$widgetType:"ais.dynamicWidgets"})}function Zi(e){var t=e.className,n=e.disabled,r=void 0!==n&&n;return Kn("button",{className:t,onClick:e.onClick,disabled:r},e.children)}function ea(e){var t=e.classNameLabel,n=e.classNameInput,r=e.checked,i=e.onToggle,a=e.children;return Kn("label",{className:t},Kn("input",{className:n,type:"checkbox",checked:r,onChange:i}),a)}
12479function ta(e){var t=e.cssClasses,n=e.enableRefine,r=e.enableRefineControl,i=e.enableClearMapRefinement,a=e.isRefineOnMapMove,s=e.isRefinedWithMap,o=e.hasMapMoveSinceLastRefine,c=e.onRefineToggle,u=e.onRefineClick,l=e.onClearClick,d=e.templateProps;return Kn(Jn,null,n&&Kn("div",null,r&&Kn("div",{className:t.control},a||!o?Kn(ea,{classNameLabel:Ei(t.label,k({},t.selectedLabel,a)),classNameInput:t.input,checked:a,onToggle:c},Kn(ki,h({},d,{templateKey:"toggle",rootTagName:"span"}))):Kn(Zi,{className:t.redo,disabled:!o,onClick:u},Kn(ki,h({},d,{templateKey:"redo",rootTagName:"span"})))),!r&&!a&&Kn("div",{className:t.control},Kn(Zi,{className:Ei(t.redo,k({},t.disabledRedo,!o)),disabled:!o,onClick:u},Kn(ki,h({},d,{templateKey:"redo",rootTagName:"span"})))),i&&s&&Kn(Zi,{className:t.reset,onClick:l},Kn(ki,h({},d,{templateKey:"reset",rootTagName:"span"})))))}function na(e){var t=e.refine,n=e.mapInstance;return t({northEast:n.getBounds().getNorthEast().toJSON(),southWest:n.getBounds().getSouthWest().toJSON()})}function ra(e,t){e.isUserInteraction=!1,t(),e.isUserInteraction=!0}function ia(e,t){var n=e.items,r=e.position,i=e.currentRefinement,a=e.refine,s=e.clearMapRefinement,o=e.toggleRefineOnMapMove,c=e.isRefineOnMapMove,u=e.setMapMoveSinceLastRefine,l=e.hasMapMoveSinceLastRefine,d=e.isRefinedWithMap,h=e.widgetParams,f=e.instantSearchInstance,m=h.container,p=h.googleReference,g=h.cssClasse
12479s,v=h.templates,y=h.initialZoom,b=h.initialPosition,S=h.enableRefine,R=h.enableClearMapRefinement,w=h.enableRefineControl,_=h.mapOptions,P=h.createMarker,x=h.markerOptions,N=h.renderState;if(t){N.isUserInteraction=!0,N.isPendingRefine=!1,N.markers=[];var I=document.createElement("div");I.className=g.root,m.appendChild(I);var F=document.createElement("div");F.className=g.map,I.appendChild(F);var T=document.createElement("div");T.className=g.tree,I.appendChild(T),N.mapInstance=new p.maps.Map(F,W({mapTypeControl:!1,fullscreenControl:!1,streetViewControl:!1,clickableIcons:!1,zoomControlOptions:{position:p.maps.ControlPosition.LEFT_TOP}},_));return p.maps.event.addListenerOnce(N.mapInstance,"idle",function(){function e(){N.isUserInteraction&&S&&(u(),c()&&(N.isPendingRefine=!0))}N.mapInstance.addListener("center_changed",e),N.mapInstance.addListener("zoom_changed",e),N.mapInstance.addListener("dragstart",e),N.mapInstance.addListener("idle",function(){N.isUserInteraction&&N.isPendingRefine&&(N.isPendingRefine=!1,na({mapInstance:N.mapInstance,refine:a}))})}),void(N.templateProps=Re({templatesConfig:f.templatesConfig,templates:v}))}var C=n.map(function(e){return e.objectID}),E=D(function(e,a){return e.reduce(function(e,t){var n=D(e,2),r=n[0],i=n[1];return a.includes(t.__id)?[r.concat(t),i]:[r,i.concat(t)]},[[],[]])}(N.markers,C),2),k=E[0],L=E[1],j=k.map(function(e){return e.__id}),M=n.filter(function(e){return!j.includes(e.objectID)});L.forEach(function(e){return e.setMap(null)}),N.markers=k.concat(M.map(function(n){var r=P({map:N.mapInstance,item:n});return Object.keys(x.events).forEach(function(t){r.addListener(t,function(e){x.events[t]({map:N.mapInstance,event:e,item:n,marker:r})})}),r}));var O=!l(),A=i?0:null,H=!i&&Boolean(N.markers.length)?function(e,t){var n=t.reduce(function(e,t){return e.extend(t.getPosition())},new e.maps.LatLngBounds);return{northEast:n.getNorthEast().toJSON(),southWest:n.getSouthWest
12479().toJSON()}}(p,N.markers):i;H&&O?ra(N,function(){N.mapInstance.fitBounds(new p.maps.LatLngBounds(H.southWest,H.northEast),A)}):O&&ra(N,function(){N.mapInstance.setCenter(r||b),N.mapInstance.setZoom(y)}),fr(Kn(ta,{cssClasses:g,enableRefine:S,enableRefineControl:w,enableClearMapRefinement:R,isRefineOnMapMove:c(),isRefinedWithMap:d(),hasMapMoveSinceLastRefine:l(),onRefineToggle:o,onRefineClick:function(){return na({mapInstance:N.mapInstance,refine:a})},onClearClick:s,templateProps:N.templateProps}),m.querySelector(".".concat(g.tree)))}var aa={HTMLMarker:"<p>Your custom HTML Marker</p>",reset:"Clear the map refinement",toggle:"Search as I move the map",redo:"Redo search here"},sa=st({name:"geo-search"}),oa=Ft("GeoSearch");function ca(e){var t=e.className,n=e.handleClick,r=e.facetValueToRefine,i=e.isRefined,a=e.templateProps,s=e.templateKey,o=e.templateData,c=e.subItems;return Kn("li",{className:t,onClick:function(e){n({facetValueToRefine:r,isRefined:i,originalEvent:e})}},Kn(ki,h({},a,{templateKey:s,data:o})),c)}var ua={query:"",showSubmit:!0,showReset:!0,showLoadingIndicator:!0,autofocus:!1,searchAsYouType:!0,isSearchStalled:!1,disabled:!1,onChange:Le,onSubmit:Le,onReset:Le,refine:Le},la=function(){L(i,Yn);var r=O(i);function i(){var s;C(this,i);for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return k(M(s=r.call.apply(r,[this].concat(t))),"state",{query:s.props.query,focused:!1}),k(M(s),"input",{current:null}),k(M(s),"onInput",function(e){var t=s.props,n=t.searchAsYouType,r=t.refine,i=t.onChange,a=e.target.value;n&&r(a),s.setState({query:a}),i(e)}),k(M(s),"onSubmit",function(e){var t=s.props,n=t.searchAsYouType,r=t.refine,i=t.onSubmit;return e.preventDefault(),e.stopPropagation(),s.input.current&&s.input.current.blur(),n||r(s.state.query),i(e),!1}),k(M(s),"onReset",function(e){var t=s.props,n=t.refine,r=t.onReset;s.input.current&&s.input.current.focus(),n(""),s.setState({query:""}),r(e)}),k(M(s),"onBlur",function(){s.setState({focused:!1})}),k(M(s),"onFocus",function(){s.setState({focused:!0})}),s}return E(i,[{key:"resetInput",value:function(){this.setState({query:""})}},{key:"componentWillReceiveProps",value:function(e){this.state.focused||e.query===this.state.query||this.setState({query:e.query})}},{key:"render",value:function(){var e=this.props,t=e.cssClasses,n=e.placeholder,r=e.autofocus,i=e.showSubmit,a=e.showReset,s=e.showLoadingIndicator,o=e.templates,c=e.isSearchStalled;return Kn("div",{className:t.root},Kn("form",{action:"",role:"search",className:t.form,noValidate:!0,onSubmit:this.onSubmit,onReset:this.onReset},Kn("input",{ref:this.input,value:this.state.query,disabled:this.props.disabled,className:t.input,type:"search",placeholder:n,autoFocus:r,autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:"false",maxLength:512,onInput:this.onInput,onBlur:this.onBlur,onFocus:this.onFocus}),Kn(ki,{templateKey:"submit",rootTagName:"button",rootProps:{className:t.submit,type:"submit",title:"Submit the search query.",hidden:!i},templates:o,data:{cssClasses:t}}),Kn(ki,{templateKey:"reset",rootTagName:"button",rootProps:{className:t.reset,type:"reset",title:"Clear the search query.",hidden:!(a&&this.state.query.trim()&&!c)},templates:o,data:{cssClasses:t}}),s&&Kn(ki,{templateKey:"loadingIndicator",rootTagName:"span",rootProps:{className:t.loadingIndicator,hidden:!c},templates:o,data:{cssClasses:t}})))}}]),i}();k(la,"defaultProps",ua);function da(e){return void 0!==e.data}var ha=function(){L(u,Yn);var n=O(u);function u(e){var t;return C(this,u),k(M(t=n.call(this,e)),"searchBox",{current:null}),t.handleItemClick=t.handleItemClick.bind(M(t)),t}return E(u,[{key:"shouldComponentUpdate",value:function(e){return!De(this.props.facetValues,e.facetValues)}},{key:"refine",value:function(e){this.props.toggleRefinement(e)}},{key:"_generateFacetItem",value:function(e){var t,n;if(da(e)&&Array.isArray(e.data)&&0<e.data.length){var r=this.props.cssClasses,i=(r.root,j(r,["root"]));n=Kn(u,h({},this.props,{cssClasses:i,depth:this.props.depth+1,facetValues:e.data,showMore:!1,className:this.props.cssClasses.childList}))}var a=this.props.createURL(e.value),s=W(W({},e),{}
12479,{url:a,attribute:this.props.attribute,cssClasses:this.props.cssClasses,isFromSearch:this.props.isFromSearch}),o=e.value;void 0!==e.isRefined&&(o+="/".concat(e.isRefined)),void 0!==e.count&&(o+="/".concat(e.count));var c=Ei(this.props.cssClasses.item,(k(t={},this.props.cssClasses.selectedItem,e.isRefined),k(t,this.props.cssClasses.disabledItem,!e.count),k(t,this.props.cssClasses.parentItem,da(e)&&Array.isArray(e.data)&&0<e.data.length),t));return Kn(ca,{templateKey:"item",key:o,facetValueToRefine:e.value,handleClick:this.handleItemClick,isRefined:e.isRefined,className:c,subItems:n,templateData:s,templateProps:this.props.templateProps})}},{key:"handleItemClick",value:function(e){var t=e.facetValueToRefine,n=e.isRefined,r=e.originalEvent;if(!be(r)&&r.target instanceof HTMLElement&&r.target.parentNode instanceof HTMLElement&&(!n||!r.target.parentNode.querySelector('input[type="radio"]:checked')))if("INPUT"!==r.target.tagName){for(var i=r.target;i!==r.currentTarget;){if("LABEL"===i.tagName&&(i.querySelector('input[type="checkbox"]')||i.querySelector('input[type="radio"]')))return;"A"===i.tagName&&i.href&&r.preventDefault(),i=i.parentNode}r.stopPropagation(),this.refine(t)}else this.refine(t)}},{key:"componentWillReceiveProps",value:function(e){this.searchBox.current&&!e.isFromSearch&&this.searchBox.current.resetInput()}},{key:"refineFirstValue",value:function(){var e=this.props.facetValues&&this.props.facetValues[0];if(e){var t=e.value;this.props.toggleRefinement(t)}}},{key:"render",value:function(){var t=this,e=Ei(this.props.cssClasses.showMore,k({},this.props.cssClasses.disabledShowMore,!(!0===this.props.showMore&&this.props.canToggleShowMore))),n=!0===this.props.showMore&&Kn(ki,h({},this.props.templateProps,{templateKey:"showMoreText",rootTagName:"button",rootProps:{className:e,disabled:!this.props.canToggleShowMore,onClick:this.props.toggleShowMore},data:{isShowingMore:this.props.isShowingMore}})),r=!0!==this.props.searchIsAlwaysActive&&!(this.props.isFromSearch||!this.props.hasExhaustiveItems),i=this.props.searchFacetValues&&Kn("div",{className:this.props.cssClasses.searchBox},Kn(la,{ref:this.searchBox,placeholder:this.props.searchPlaceholder,disabled:r,cssClasses:this.props.cssClasses.searchable,templates:this.props.searchBoxTemplateProps.templates,onChange:function(e){return t.props.searchFacetValues(e.target.value)},onReset:function(){return t.props.searchFacetValues("")},onSubmit:function(){return t.refineFirstValue()},searchAsYouType:!1})),a=this.props.facetValues&&0<this.props.facetValues.length&&Kn("ul",{className:this.props.cssClasses.list},this.props.facetValues.map(this._generateFacetItem,this)),s=this.props.searchFacetValues&&this.props.isFromSearch&&(!this.props.facetValues||0===this.props.facetValues.length)&&Kn(ki,h({},this.props.templateProps,{templateKey:"searchableNoResults",rootProps:{className:this.props.cssClasses.noResults}}));return Kn("div",{className:Ei(this.props.cssClasses.root,k({},this.props.cssClasses.noRefinementRoot,!this.props.facetValues||0===this.props.facetValues.length),this.props.className)},this.props.children,i,a,s,n)}}]),u}();k(ha,"defaultProps",{cssClasses:{},depth:0});var fa={item:'<a class="{{cssClasses.link}}" href="{{url}}"><span class="{{cssClasses.label}}">{{label}}</span><span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span></a>',showMoreText:"\n    {{#isShowingMore}}\n      Show less\n    {{/isShowingMore}}\n    {{^isShowingMore}}\n      Show more\n    {{/isShowingMore}}\n  "},ma=st({name:"hierarchical-menu"}),pa=Ft("HierarchicalMenu"),ga={empty:"No results",item:function(e){return JSON.stringify(e,null,2)}},va=st({name:"hits"}),ya=Ft("Hits"),ba=pr(function(e){var t=e.results,n=e.hits,r=e.bindEvent,i=e.cssClasses,a=e.templateProps;return 0===t.hits.length?Kn(ki,h({},a,{templateKey:"empty",rootProps:{className:Ei(i.root,i.emptyRoot)},data:t})):Kn("div",{className:i.root},Kn("ol",{className:i.list},n.map(function(e,t){return Kn(ki,h({},a,{templateKey:"item",rootTagName:"li",rootProps:{className:i.item},key:e.objectID,data:W(W({},e),{},{__hitIndex:t}),bindEvent:r}))})))});
12479function Sa(e){var t=e.currentValue,n=e.options,r=e.cssClasses,i=e.setValue;return Kn("select",{className:Ei(r.select),onChange:function(e){return i(e.target.value)},value:"".concat(t)},n.map(function(e){return Kn("option",{className:Ei(r.option),key:e.label+e.value,value:"".concat(e.value)},e.label)}))}var Ra=st({name:"hits-per-page"}),wa=Ft("HitsPerPage"),_a={empty:"No results",showPreviousText:"Show previous results",showMoreText:"Show more results",item:function(e){return JSON.stringify(e,null,2)}},Pa=st({name:"infinite-hits"}),xa=Ft("InfiniteHits"),Na=pr(function(e){var t=e.results,n=e.hits,r=e.bindEvent,i=e.hasShowPrevious,a=e.showPrevious,s=e.showMore,o=e.isFirstPage,c=e.isLastPage,u=e.cssClasses,l=e.templateProps;return 0===t.hits.length?Kn(ki,h({},l,{templateKey:"empty",rootProps:{className:Ei(u.root,u.emptyRoot)},data:t})):Kn("div",{className:u.root},i&&Kn(ki,h({},l,{templateKey:"showPreviousText",rootTagName:"button",rootProps:{className:Ei(u.loadPrevious,k({},u.disabledLoadPrevious,o)),disabled:o,onClick:a}})),Kn("ol",{className:u.list},n.map(function(e,t){return Kn(ki,h({},l,{templateKey:"item",rootTagName:"li",rootProps:{className:u.item},key:e.objectID,data:W(W({},e),{},{__hitIndex:t}),bindEvent:r}))})),Kn(ki,h({},l,{templateKey:"showMoreText",rootTagName:"button",rootProps:{className:Ei(u.loadMore,k({},u.disabledLoadMore,c)),disabled:c,onClick:s}})))}),Ia={item:'<a class="{{cssClasses.link}}" href="{{url}}"><span class="{{cssClasses.label}}">{{label}}</span><span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span></a>',showMoreText:"\n    {{#isShowingMore}}\n      Show less\n    {{/isShowingMore}}\n    {{^isShowingMore}}\n      Show more\n    {{/isShowingMore}}\n  "},Fa=st({name:"menu"}),Ta=Ft("Menu");function Ca(e){var t=e.cssClasses,n=e.templateProps,r=e.items,i=e.refine,a=(Ie(r,function(e){return e.isRefined})||{value:""}).value;return Kn("div",{className:Ei(t.root,k({},t.noRefinementRoot,0===r.length))},Kn("select",{className:t.select,value:a,onChange:function(e){i(e.target.value)}},Kn(ki,h({},n,{templateKey:"defaultOption",rootTagName:"option",rootProps:{value:"",className:t.option}})),r.map(function(e){return Kn(ki,h({},n,{templateKey:"item",rootTagName:"option",rootProps:{value:e.value,className:t.option},key:e.value,data:e}))})))}var Ea={item:"{{label}} ({{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}})",defaultOption:"See all"},ka=st({name:"menu-select"}),La=Ft("MenuSelect"),ja={item:'<label class="{{cssClasses.label}}">\n  <input type="radio" class="{{cssClasses.radio}}" name="{{attribute}}"{{#isRefined}} checked{{/isRefined}} />\n  <span class="{{cssClasses.labelText}}">{{label}}</span>\n</label>'},Ma=st({name:"numeric-menu"}),Oa=Ft("NumericMenu");function Aa(n){function t(t){return function(e){be(e)||(e.preventDefault(),n.setCurrentPage(t))}}return Kn("div",{className:Ei(n.cssClasses.root,k({}
12479,n.cssClasses.noRefinementRoot,n.nbPages<=1))},Kn("ul",{className:n.cssClasses.list},n.showFirst&&Kn(Ha,{ariaLabel:"First",className:n.cssClasses.firstPageItem,isDisabled:n.isFirstPage,label:n.templates.first,pageNumber:0,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t}),n.showPrevious&&Kn(Ha,{ariaLabel:"Previous",className:n.cssClasses.previousPageItem,isDisabled:n.isFirstPage,label:n.templates.previous,pageNumber:n.currentPage-1,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t}),n.pages.map(function(e){return Kn(Ha,{key:e,ariaLabel:"".concat(e+1),className:n.cssClasses.pageItem,isSelected:e===n.currentPage,label:"".concat(e+1),pageNumber:e,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t})}),n.showNext&&Kn(Ha,{ariaLabel:"Next",className:n.cssClasses.nextPageItem,isDisabled:n.isLastPage,label:n.templates.next,pageNumber:n.currentPage+1,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t}),n.showLast&&Kn(Ha,{ariaLabel:"Last",className:n.cssClasses.lastPageItem,isDisabled:n.isLastPage,label:n.templates.last,pageNumber:n.nbPages-1,createURL:n.createURL,cssClasses:n.cssClasses,createClickHandler:t})))}function Ha(e){var t=e.label,n=e.ariaLabel,r=e.pageNumber,i=e.className,a=e.isDisabled,s=void 0!==a&&a,o=e.isSelected,c=void 0!==o&&o,u=e.cssClasses,l=e.createURL,d=e.createClickHandler;return Kn("li",{className:Ei(u.item,i,s&&u.disabledItem,c&&u.selectedItem)},s?Kn("span",{className:u.link,dangerouslySetInnerHTML:{__html:t}}):Kn("a",{className:u.link,"aria-label":n,href:l(r),onClick:d(r),dangerouslySetInnerHTML:{__html:t}}))}var Wa,Da,Ba,Ua=Ft("Pagination"),qa=st({name:"pagination"}
12479),Qa={previous:"‹",next:"›",first:"«",last:"»"},Va=0,$a=[],Ka=An.__b,za=An.__r,Ja=An.diffed,Ya=An.__c,Xa=An.unmount;function Ga(e,t){An.__h&&An.__h(Da,e,Va||t),Va=0;var n=Da.__H||(Da.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function Za(e){return Va=1,function(e,t,n){var r=Ga(Wa++,2);return r.t=e,r.__c||(r.__=[n?n(t):ss(void 0,t),function(e){var t=r.t(r.__[0],e);r.__[0]!==t&&(r.__=[t,r.__[1]],r.__c.setState({}))}],r.__c=Da),r.__}(ss,e)}function es(e){return Va=5,function(e,t){var n=Ga(Wa++,7);return as(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}(function(){return{current:e}},[])}function ts(){var t;for($a.sort(function(e,t){return e.__v.__b-t.__v.__b});t=$a.pop();)if(t.__P)try{t.__H.__h.forEach(rs),t.__H.__h.forEach(is),t.__H.__h=[]}catch(e){t.__H.__h=[],An.__e(e,t.__v)}}An.__b=function(e){Da=null,Ka&&Ka(e)},An.__r=function(e){za&&za(e),Wa=0;var t=(Da=e.__c).__H;t&&(t.__h.forEach(rs),t.__h.forEach(is),t.__h=[])},An.diffed=function(e){Ja&&Ja(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(1!==$a.push(t)&&Ba===An.requestAnimationFrame||((Ba=An.requestAnimationFrame)||function(e){function t(){clearTimeout(r),ns&&cancelAnimationFrame(n),setTimeout(e)}var n,r=setTimeout(t,100);ns&&(n=requestAnimationFrame(t))})(ts)),Da=null}
vendor: 7,062 bytes, line 12479
12479,An.__c=function(e,n){n.some(function(t){try{t.__h.forEach(rs),t.__h=t.__h.filter(function(e){return!e.__||is(e)})}catch(e){n.some(function(e){e.__h&&(e.__h=[])}),n=[],An.__e(e,t.__v)}}),Ya&&Ya(e,n)},An.unmount=function(e){Xa&&Xa(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(e){try{rs(e)}catch(e){t=e}}),t&&An.__e(t,n.__v))};var ns="function"==typeof requestAnimationFrame;function rs(e){var t=Da,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),Da=t}function is(e){var t=Da;e.__c=e.__(),Da=t}function as(n,e){return!n||n.length!==e.length||e.some(function(e,t){return e!==n[t]})}function ss(e,t){return"function"==typeof t?t(e):t}function os(t){var e,n=D(Za(t.isCollapsed),2),r=n[0],i=n[1],a=D(Za(!1),2),s=a[0],o=a[1],c=es(null);return function(e,t){var n=Ga(Wa++,3);!An.__s&&as(n.__H,t)&&(n.__=e,n.__H=t,Da.__H.__h.push(n))}(function(){var e=c.current;if(e)return e.appendChild(t.bodyElement),function(){e.removeChild(t.bodyElement)}},[c,t.bodyElement]),s||t.isCollapsed===r||i(t.isCollapsed),Kn("div",{className:Ei(t.cssClasses.root,(e={},k(e,t.cssClasses.noRefinementRoot,t.hidden),k(e,t.cssClasses.collapsibleRoot,t.collapsible),k(e,t.cssClasses.collapsedRoot,r),e)),hidden:t.hidden},t.templates.header&&Kn("div",{className:t.cssClasses.header},Kn(ki,{templates:t.templates,templateKey:"header",rootTagName:"span",data:t.data}),t.collapsible&&Kn("button",{className:t.cssClasses.collapseButton,"aria-expanded":!r,onClick:function(e){e.preventDefault(),o(!0),i(function(e){return!e})}},Kn(ki,{templates:t.templates,templateKey:"collapseButtonText",rootTagName:"span",data:{collapsed:r}}))),Kn("div",{className:t.cssClasses.body,ref:c}),t.templates.footer&&Kn(ki,{templates:t.templates,templateKey:"footer",rootProps:{className:t.cssClasses.footer},data:t.data}))}function cs(e){var t=e.url,n=e.theme,r=e.cssClasses;return Kn("div",{className:r.root},Kn("a",{href:t,target:"_blank",className:r.link,"aria-label":"Search by Algolia",rel:"noopener noreferrer"},Kn("svg",{height:"1.2em",className:r.logo,viewBox:"0 0 168 24",style:{width:"auto"}},Kn("path",{fill:"dark"===n?"#FFF":"#5D6494",d:"M6.97 6.68V8.3a4.47 4.47 0 00-2.42-.67 2.2 2.2 0 00-1.38.4c-.34.26-.5.6-.5 1.02 0 .43.16.77.49 1.03.33.25.83.53 1.51.83a7.04 7.04 0 011.9 1.08c.34.24.58.54.73.89.15.34.23.74.23 1.18 0 .95-.33 1.7-1 2.24a4 4 0 01-2.6.81 5.71 5.71 0 01-2.94-.68v-1.71c.84.63 1.81.94 2.92.94.58 0 1.05-.14 1.39-.4.34-.28.5-.65.5-1.13 0-.29-.1-.55-.3-.8a2.2 2.2 0 00-.65-.53 23.03 23.03 0 00-1.64-.78 13.67 13.67 0 01-1.11-.64c-.12-.1-.28-.22-.46-.4a1.72 1.72 0 01-.39-.5 4.46 4.46 0 01-.22-.6c-.07-.23-.1-.48-.1-.75 0-.91.33-1.63 1-2.17a4 4 0 012.57-.8c.97 0 1.8.18 2.47.52zm7.47 5.7v-.3a2.26 2.26 0 00-.5-1.44c-.3-.35-.74-.53-1.32-.53-.53 0-.99.2-1.37.58a2.9 2.9 0 00-.72 1.68h3.91zm1 2.79v1.4c-.6.34-1.38.51-2.36.51a4.02 4.02 0 01-3-1.13 4.04 4.04 0 01-1.11-2.97c0-1.3.34-2.32 1.02-3.06a3.38 3.38 0 012.6-1.1c1.03 0 1.85.32 2.46.96.6.64.9 1.57.9 2.78 0 .33-.03.68-.09 1.04h-5.31c.1.7.4 1.24.89 1.61.49.38 1.1.56 1.85.56.86 0 1.58-.2 2.15-.6zm6.61-1.78h-1.21c-.6 0-1.05.12-1.35.36-.3.23-.46.53-.46.89 0 .37.12.66.36.88.23.2.57.32 1.02.32.5 0 .9-.15 1.2-.43.3-.28.44-.65.44-1.1v-.92zm-4.07-2.55V9.33a4.96 4.96 0 012.5-.55c2.1 0 3.17 1.03 3.17 3.08V17H22.1v-.96c-.42.68-1.15 1.02-2.19 1.02-.76 0-1.38-.22-1.84-.66-.46-.44-.7-1-.7-1.68 0-.78.3-1.38.88-1.81.59-.43 1.4-.65 2.46-.65h1.34v-.46c0-.55-.13-.97-.4-1.25-.26-.29-.7-.43-1.32-.43-.86 0-1.65.24-2.35.72zm9.34-1.93v1.42c.39-1 1.1-1.5 2.12-1.5.15 0 .31.02.5.05v1.53c-.23-.1-.48-.14-.76-.14-.54 0-.99.24-1.34.71a2.8 2.8 0 00-.52 1.71V17h-1.57V8.91h1.57zm5 4.09a3 3 0 00.76 2.01c.47.53 1.14.8 2 .8.64 0 1.24-.18 1.8-.53v1.4c-.53.32-1.2.48-2 .48a3.98 3.98 0 01-4.17-4.18c0-1.16.38-2.15 1.14-2.98a4 4 0 013.1-1.23c.7 0 1.34.15 1.92.44v1.44a3.24 3.24 0 00-1.77-.5A2.65 2.65 0 0032.33 13zm7.92-7.28v4.58c.46-1 1.3-1.5 2.5-1.5.8 0 1.42.24 1.9.73.48.5.72 1.17.72 2.05V17H43.8v-5.1c0-.56-.14-.99-.43-1.29-.28-.3-.65-.45-1.1-.45-.54 0-1 .2-1.42.6-.4.4-.61 1.02-.61 1.85V17h-1.56V5.72h1.56zM55.2 15.74c.6 0 1.1-.25 1.5-.76.4-.5.6-1.16.6-1.95 0-.92-.2-1.62-.6-2.12-.4-.5-.92-.74-1.55-.74-.56 0-1.05.22-1.5.67-.44.45-.66 1.13-.66 2.06 0 .96.22 1.67.64 2.14.43.47.95.7 1.57.7zM53 5.72v4.42a2.74 2.74 0 012.43-1.34c1.03 0 1.86.38 2.51 1.15.65.76.97 1.78.97 3.05 0 1.13-.3 2.1-.92 2.9-.62.81-1.47 1.21-2.54 1.21s-1.9-.45-2.46-1.34V17h-1.58V5.72H53zm9.9 11.1l-3.22-7.9h1.74l1 2.62 1.26 3.42c.1-.32.48-1.46 1.15-3.42l.91-2.63h1.66l-2.92 7.87c-.78 2.07-1.96 3.1-3.56 3.1-.28 0-.53-.02-.73-.07v-1.34c.17.04.35.06.54.06 1.03 0 1.76-.57 2.17-1.7z"}),hs,fs,Kn("path",{fill:"dark"===n?"#FFF":"#5468FF",d:"M120.92 18.8c-4.38.02-4.38-3.54-4.38-4.1V1.36l2.67-.42v13.25c0 .32 0 2.36 1.71 2.37v2.24zm-10.84-2.18c.82 0 1.43-.04 1.85-.12v-2.72a5.48 5.48 0 00-1.57-.2c-.3 0-.6.02-.9.07-.3.04-.57.12-.81.24-.24.11-.44.28-.58.49a.93.93 0 00-.22.65c0 .63.22 1 .61 1.23.4.24.94.36 1.62.36zm-.23-9.7c.88 0 1.62.11 2.23.33.6.22 1.09.53 1.44.92.36.4.61.92.76 1.48.16.56.23 1.17.23 1.85v6.87a21.69 21.69 0 01-4.68.5c-.69 0-1.32-.07-1.9-.2a4 4 0 01-1.46-.63 3.3 3.3 0 01-.96-1.13 4.3 4.3 0 01-.34-1.8 3.13 3.13 0 011.43-2.63c.45-.3.95-.5 1.54-.62a8.8 8.8 0 013.79.05v-.44c0-.3-.04-.6-.11-.87a1.78 1.78 0 00-1.1-1.22 3.2 3.2 0 00-1.15-.2 9.75 9.75 0 00-2.95.46l-.33-2.19a11.43 11.43 0 013.56-.53zm52.84 9.63c.82 0 1.43-.05 1.85-.13V13.7a5.42 5.42 0 00-1.57-.2c-.3 0-.6.02-.9.07-.3.04-.57.12-.81.24-.24.12-.44.28-.58.5a.93.93 0 00-.22.65c0 .63.22.99.61 1.23.4.24.94.36 1.62.36zm-.23-9.7c.88 0 1.63.11 2.23.33.6.22 1.1.53 1.45.92.35.39.6.92.76 1.48.15.56.23 1.18.23 1.85v6.88c-.41.08-1.03.19-1.87.31-.83.12-1.77.18-2.81.18-.7 0-1.33-.06-1.9-.2a4 4 0 01-1.47-.63c-.4-.3-.72-.67-.95-1.13a4.3 4.3 0 01-.34-1.8c0-.66.13-1.08.38-1.53.26-.45.61-.82 1.05-1.1.44-.3.95-.5 1.53-.62a8.8 8.8 0 013.8.05v-.43c0-.31-.04-.6-.12-.88-.07-.28-.2-.52-.38-.73a1.78 1.78 0 00-.73-.5c-.3-.1-.68-.2-1.14-.2a9.85 9.85 0 00-2.95.47l-.32-2.19a11.63 11.63 0 013.55-.53zm-8.03-1.27a1.62 1.62 0 000-3.24 1.62 1.62 0 100 3.24zm1.35 13.22h-2.7V7.27l2.7-.42V18.8zm-4.72 0c-4.38.02-4.38-3.54-4.38-4.1l-.01-13.34 2.67-.42v13.25c0 .32 0 2.36 1.72 2.37v2.24zm-8.7-5.9a4.7 4.7 0 00-.74-2.79 2.4 2.4 0 00-2.07-1 2.4 2.4 0 00-2.06 1 4.7 4.7 0 00-.74 2.8c0 1.16.25 1.94.74 2.62a2.4 2.4 0 002.07 1.02c.88 0 1.57-.34 2.07-1.02a4.2 4.2 0 00.73-2.63zm2.74 0a6.46 6.46 0 01-1.52 4.23c-.49.53-1.07.94-1.76 1.22-.68.29-1.73.45-2.26.45a6.6 6.6 0 01-2.25-.45 5.1 5.1 0 01-2.88-3.13 7.3 7.3 0 01-.01-4.84 5.13 5.13 0 012.9-3.1 5.67 5.67 0 012.22-.42c.81 0 1.56.14 2.24.42.69.29 1.28.69 1.75 1.22.49.52.87 1.15 1.14 1.89a7 7 0 01.43 2.5zm-20.14 0c0 1.11.25 2.36.74 2.88.5.52 1.13.78 1.91.78a4.07 4.07 0 002.12-.6V9.33c-.19-.04-.99-.2-1.76-.23a2.67 2.67 0 00-2.23 1 4.73 4.73 0 00-.78 2.8zm7.44 5.27c0 1.82-.46 3.16-1.4 4-.94.85-2.37 1.27-4.3 1.27-.7 0-2.17-.13-3.34-.4l.43-2.11c.98.2 2.27.26 2.95.26 1.08 0 1.84-.22 2.3-.66.46-.43.68-1.08.68-1.94v-.44a5.2 5.2 0 01-2.54.6 5.6 5.6 0 01-2.01-.36 4.2 4.2 0 01-2.58-2.71 9.88 9.88 0 01.02-5.35 4.92 4.92 0 012.93-2.96 6.6 6.6 0 012.43-.46 19.64 19.64 0 014.43.66v10.6z"}))))}
12479function us(e){var t=e.cssClasses,n=e.templates,r=e.items;return Kn(ki,{templateKey:"default",templates:n,rootProps:{className:t.root},data:{items:r}})}var ls=st({name:"panel"}),ds=Ft("Panel"),hs=Kn("path",{fill:"#5468FF",d:"M78.99.94h16.6a2.97 2.97 0 012.96 2.96v16.6a2.97 2.97 0 01-2.97 2.96h-16.6a2.97 2.97 0 01-2.96-2.96V3.9A2.96 2.96 0 0179 .94"}),fs=Kn("path",{fill:"#FFF",d:"M89.63 5.97v-.78a.98.98 0 00-.98-.97h-2.28a.98.98 0 00-.97.97V6c0 .09.08.15.17.13a7.13 7.13 0 013.9-.02c.08.02.16-.04.16-.13m-6.25 1L83 6.6a.98.98 0 00-1.38 0l-.46.46a.97.97 0 000 1.38l.38.39c.06.06.15.04.2-.02a7.49 7.49 0 011.63-1.62c.07-.04.08-.14.02-.2m4.16 2.45v3.34c0 .1.1.17.2.12l2.97-1.54c.06-.03.08-.12.05-.18a3.7 3.7 0 00-3.08-1.87c-.07 0-.14.06-.14.13m0 8.05a4.49 4.49 0 110-8.98 4.49 4.49 0 010 8.98m0-10.85a6.37 6.37 0 100 12.74 6.37 6.37 0 000-12.74"}),ms=Ft("PoweredBy"),ps=st({name:"powered-by"}),gs=st({name:"query-rule-context"}),vs={default:function(e){var t=e.items;return JSON.stringify(t,null,2)}},ys=st({name:"query-rule-custom-data"}),bs=Ft("QueryRuleCustomData"),Ss=function(){L(a,Yn);var i=O(a);function a(){var r;C(this,a);for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return k(M(r=i.call.apply(i,[this].concat(t))),"state",{min:r.props.values.min,max:r.props.values.max}),k(M(r),"onInput",function(n){return function(e){var t=e.currentTarget.value;r.setState(k({},n,Number(t)))}}),k(M(r),"onSubmit",function(e){e.preventDefault(),r.props.refine([r.state.min,r.state.max])}),r}return E(a,[{key:"componentWillReceiveProps",value:function(e){this.setState({min:e.values.min,max:e.values.max})}},{key:"render",value:function(){var e=this.state,t=e.min,n=e.max,r=this.props,i=r.min,a=r.max,s=r.step,o=r.cssClasses,c=r.templateProps,u=!(!i||!a)&&a<=i,l=Boolean(t||n);return Kn("div",{className:Ei(o.root,k({},o.noRefinement,!l))},Kn("form",{className:o.form,onSubmit:this.onSubmit},Kn("label",{className:o.label},Kn("input",{className:Ei(o.input,o.inputMin),type:"number",min:i,max:a,step:s,value:null!=t?t:"",onInput:this.onInput("min"),placeholder:null==i?void 0:i.toString(),disabled:u})),Kn(ki,h({},c,{templateKey:"separatorText",rootTagName:"span",rootProps:{className:o.separator}})),Kn("label",{className:o.label},Kn("input",{className:Ei(o.input,o.inputMax),type:"number",min:i,max:a,step:s,value:null!=n?n:"",onInput:this.onInput("max"),placeholder:null==a?void 0:a.toString(),disabled:u})),Kn(ki,h({},c,{templateKey:"submitText",rootTagName:"button",rootProps:{type:"submit",className:o.submit,disabled:u}}))))}}]),a}(),Rs=st({name:"range-input"}),ws=Ft("RangeInput"),_s={separatorText:"to",submitText:"Go"},Ps=40,xs=35,Ns=27,Is=36,Fs=37,Ts=34,Cs=33,Es=39,ks=38,Ls=100;function js(e,t,n){return(e-t)/(n-t)*100}function Ms(e,t,n){var r=e/100;return 0===e?t:100===e?n:Math.round((n-t)*r+t)}function Os(e){return["rheostat","vertical"===e.orientation?"rheostat-vertical":"rheostat-horizontal"].concat(e.className.split(" ")).join(" ")}function As(e){return Number(e.currentTarget.getAttribute("data-handle-key"))}function Hs(e){e.stopPropagation(),e.preventDefault()}var Ws=Kn("div",{className:"rheostat-background"}),Ds=function(){L(r,Yn);var n=O(r);function r(e){var t;return C(this,r),k(M(t=n.call(this,e)),"state",{className:Os(t.props),handlePos:t.props.values.map(function(e){return js(e,t.props.min,t.props.max)}
12479),handleDimensions:0,mousePos:null,sliderBox:{},slidingIndex:null,values:t.props.values}),k(M(t),"rheostat",{current:null}),t.getPublicState=t.getPublicState.bind(M(t)),t.getSliderBoundingBox=t.getSliderBoundingBox.bind(M(t)),t.getProgressStyle=t.getProgressStyle.bind(M(t)),t.getMinValue=t.getMinValue.bind(M(t)),t.getMaxValue=t.getMaxValue.bind(M(t)),t.getHandleDimensions=t.getHandleDimensions.bind(M(t)),t.getClosestSnapPoint=t.getClosestSnapPoint.bind(M(t)),t.getSnapPosition=t.getSnapPosition.bind(M(t)),t.getNextPositionForKey=t.getNextPositionForKey.bind(M(t)),t.getNextState=t.getNextState.bind(M(t)),t.handleClick=t.handleClick.bind(M(t)),t.getClosestHandle=t.getClosestHandle.bind(M(t)),t.setStartSlide=t.setStartSlide.bind(M(t)),t.startMouseSlide=t.startMouseSlide.bind(M(t)),t.startTouchSlide=t.startTouchSlide.bind(M(t)),t.handleMouseSlide=t.handleMouseSlide.bind(M(t)),t.handleTouchSlide=t.handleTouchSlide.bind(M(t)),t.handleSlide=t.handleSlide.bind(M(t)),t.endSlide=t.endSlide.bind(M(t)),t.handleKeydown=t.handleKeydown.bind(M(t)),t.validatePosition=t.validatePosition.bind(M(t)),t.validateValues=t.validateValues.bind(M(t)),t.canMove=t.canMove.bind(M(t)),t.fireChangeEvent=t.fireChangeEvent.bind(M(t)),t.slideTo=t.slideTo.bind(M(t)),t.updateNewValues=t.updateNewValues.bind(M(t)),t}return E(r,[{key:"componentWillReceiveProps",value:function(n){var e=this.props,t=e.className,r=e.disabled,i=e.min,a=e.max,s=e.orientation,o=this.state,c=o.values,u=o.slidingIndex,l=n.min!==i||n.max!==a,d=c.length!==n.values.length||c.some(function(e,t){return n.values[t]!==e}),h=n.className!==t||n.orientation!==s,f=n.disabled&&!r;h&&this.setState({className:Os(n)}),(l||d)&&this.updateNewValues(n),f&&null!==u&&this.endSlide()}},{key:"getPublicState",value:function(){var e=this.props,t=e.min;return{max:e.max,min:t,values:this.state.values}}},{key:"getSliderBoundingBox",value:function(){var e=this.rheostat.current,t=e.getBoundingClientRect();return{height:t.height||e.clientHeight,left:t.left,top:t.top,width:t.width||e.clientWidth}}},{key:"getProgressStyle",value:function(e){var t=this.state.handlePos,n=t[e];if(0===e)return"vertical"===this.props.orientation?{height:"".concat(n,"%"),top:0}:{left:0,width:"".concat(n,"%")};var r=t[e-1],i=n-r;return"vertical"===this.props.orientation?{height:"".concat(i,"%"),top:"".concat(r,"%")}:{left:"".concat(r,"%"),width:"".concat(i,"%")}}},{key:"getMinValue",value:function(e){return this.state.values[e-1]?Math.max(this.props.min,this.state.values[e-1]):this.props.min}},{key:"getMaxValue",value:function(e){return this.state.values[e+1]?Math.min(this.props.max,this.state.values[e+1]):this.props.max}},{key:"getHandleDimensions",value:function(e,t){var n=e.currentTarget||null;return n?"vertical"===this.props.orientation?n.clientHeight/t.height*Ls/2:n.clientWidth/t.width*Ls/2:0}},{key:"getClosestSnapPoint",value:function(n){return this.props.snapPoints.length?this.props.snapPoints.reduce(function(e,t){return Math.abs(e-n)<Math.abs(t-n)?e:t}):n}},{key:"getSnapPosition",value:function(e){if(!this.props.snap)return e;var t=this.props,n=t.max,r=t.min,i=Ms(e,r,n);return js(this.getClosestSnapPoint(i),r,n)}},{key:"getNextPositionForKey",value:function(e,t){var n,r=this.state,i=r.handlePos,a=r.values,s=this.props,o=s.max,c=s.min,u=s.snapPoints,l=this.props.snap,d=a[e],h=i[e],f=h,m=1;100<=o?h=Math.round(h):m=100/(o-c);var p=null;l&&(p=u.indexOf(this.getClosestSnapPoint(a[e])));var g=(k(n={},Fs,function(e){return-1*e}),k(n,Es,function(e){return e}),k(n,ks,function(e){return e}),k(n,Ps,function(e){return-1*e}),k(n,Ts,function(e){return 1<e?-e:-10*e}),k(n,Cs,function(e){return 1<e?e:10*e}),n);if(Object.prototype.hasOwnProperty.call(g,t))h+=g[t](m),l&&p&&(f<h?p<u.length-1&&(d=u[p+1]):0<p&&(d=u[p-1]));else if(t===Is)h=0,l&&(d=u[0]);else{if(t!==xs)return null;h=Ls,l&&(d=u[u.length-1])}return l?js(d,c,o):h}},{key:"getNextState",value:function(n,e){var t=this.state.handlePos,r=this.props,i=r.max,a=r.min,s=this.validatePosition(n,e),o=t.map(function(e,t){return t===n?s:e});return{handlePos:o,values:o.map(function(e){return Ms(e,a,i)})}}},{key:"getClosestHandle",value:function(r){var i=this.state.handlePos;return i.reduce(function(e,t,n){return Math.abs(i[n]-r)<Math.abs(i[e]-r)?n:e},0)}},{key:"setStartSlide",value:function(e,t,n){var r=this.getSliderBoundingBox();this.setState({handleDimensions:this.getHandleDimensions(e,r),mousePos:{x:t,y:n},sliderBox:r,slidingIndex:As(e)})}},{key:"startMouseSlide",value:function(e){this.setStartSlide(e,e.clientX,e.clientY),document.addEventListener("mousemove",this.handleMouseSlide,!1),document.addEventListener("mouseup",this.endSlide,!1),Hs(e)}},{key:"startTouchSlide",value:function(e){if(!(1<e.changedTouches.length)){var t=e.changedTouches[0];this.setStartSlide(e,t.clientX,t.clientY),document.addEventListener("touchmove",this.handleTouchSlide,!1),document.addEventListener("touchend",this.endSlide,!1),this.props.onSliderDragStart&&this.props.onSliderDragStart(),Hs(e)}}},{key:"handleMouseSlide",value:function(e){null!==this.state.slidingIndex&&(this.handleSlide(e.clientX,e.clientY),Hs(e))}},{key:"handleTouchSlide",value:function(e){if(null!==this.state.slidingIndex)if(1<e.changedTouches.length)this.endSlide();else{var t=e.changedTouches[0];this.handleSlide(t.clientX,t.clientY),Hs(e)}}},{key:"handleSlide",value:function(e,t){var n=this.state,r=n.slidingIndex,i=n.sliderBox,a="vertical"===this.props.orientation?(t-i.top)/i.height*Ls:(e-i.left)/i.width*Ls;this.slideTo(r,a),this.canMove(r,a)&&(this.setState({mousePos:{x:e,y:t}}),this.props.onSliderDragMove&&this.props.onSliderDragMove())}},{key:"endSlide",value:function(){var e=this,t=this.state.slidingIndex;if(this.setState({slidingIndex:null}),document.removeEventListener("mouseup",this.endSlide,!1),document.removeEventListener("touchend",this.endSlide,!1),document.removeEventListener("touchmove",this.handleTouchSlide,!1),document.removeEventListener("mousemove",this.handleMouseSlide,!1),this.props.onSliderDragEnd&&this.props.onSliderDragEnd(),this.props.snap){var n=this.getSnapPosition(this.state.handlePos[t]);this.slideTo(t,n,function(){return e.fireChangeEvent()})}else this.fireChangeEvent()}},{key:"handleClick",value:function(e){var t=this;if(!e.target.getAttribute("data-handle-key")){var n=this.getSliderBoundingBox(),r=("vertical"===this.props.orientation?(e.clientY-n.top)/n.height:(e.clientX-n.left)/n.width)*Ls,i=this.getClosestHandle(r),a=this.getSnapPosition(r);this.slideTo(i,a,function(){return t.fireChangeEvent()}),this.props.onClick&&this.props.onClick()}}},{key:"handleKeydown",value:function(e){var t=this,n=As(e);if(e.keyCode!==Ns){var r=this.getNextPositionForKey(n,e.keyCode);null!==r&&(this.canMove(n,r)&&(this.slideTo(n,r,function(){return t.fireChangeEvent()}),this.props.onKeyPress&&this.props.onKeyPress()),Hs(e))}else e.currentTarget.blur()}},{key:"validatePosition",value:function(e,t){var n=this.state,r=n.handlePos,i=n.handleDimensions;return Math.max(Math.min(t,void 0!==r[e+1]?r[e+1]-i:Ls),void 0!==r[e-1]?r[e-1]+i:0)}},{key:"validateValues",value:function(e,t){var n=t||this.props,i=n.max,a=n.min;return e.map(function(e,t,n){var r=Math.max(Math.min(e,i),a);return n.length&&r<n[t-1]?n[t-1]:r})}},{key:"canMove",value:function(e,t){var n=this.state,r=n.handlePos,i=n.handleDimensions;return!(t<0)&&(!(Ls<t)&&(!((void 0!==r[e+1]?r[e+1]-i:1/0)<t)&&!(t<(void 0!==r[e-1]?r[e-1]+i:-1/0))))}},{key:"fireChangeEvent",value:function(){var e=this.props.onChange;e&&e(this.getPublicState())}},{key:"slideTo",value:function(e,t,n){var r=this,i=this.getNextState(e,t);this.setState(i,function(){var e=r.props.onValuesUpdated;e&&e(r.getPublicState()),n&&n()})}},{key:"updateNewValues",value:function(e){var t=this;if(null===this.state.slidingIndex){var n=e.max,r=e.min,i=e.values,a=this.validateValues(i,e);this.setState({handlePos:a.map(function(e){return js(e,r,n)}),values:a},function(){return t.fireChangeEvent()})}}},{key:"render",value:function(){var r=this,e=this.props,t=e.children,i=e.disabled,a=e.handle,s=e.max,o=e.min,c=e.orientation,u=e.pitComponent,n=e.pitPoints,l=e.progressBar,d=this.state,h=d.className,f=d.handlePos,m=d.values;return Kn("div",{className:h,ref:this.rheostat,onClick:i?void 0:this.handleClick,style:{position:"relative"}}
12479,Ws,f.map(function(e,t){var n="vertical"===c?{top:"".concat(e,"%"),position:"absolute"}:{left:"".concat(e,"%"),position:"absolute"};return Kn(a,{"aria-valuemax":r.getMaxValue(t),"aria-valuemin":r.getMinValue(t),"aria-valuenow":m[t],"aria-disabled":i,"data-handle-key":t,className:"rheostat-handle",key:"handle-".concat(t),onClick:Hs,onKeyDown:i?void 0:r.handleKeydown,onMouseDown:i?void 0:r.startMouseSlide,onTouchStart:i?void 0:r.startTouchSlide,role:"slider",style:n,tabIndex:0})}),f.map(function(e,t,n){return 0===t&&1<n.length?null:Kn(l,{className:"rheostat-progress",key:"progress-bar-".concat(t),style:r.getProgressStyle(t)})}),u&&n.map(function(e){var t=js(e,o,s),n="vertical"===c?{top:"".concat(t,"%"),position:"absolute"}:{left:"".concat(t,"%"),position:"absolute"};return Kn(u,{key:"pit-".concat(e),style:n},e)}),t)}}]),r}();k(Ds,"defaultProps",{className:"",children:null,disabled:!1,handle:function(e){return Kn("button",h({},e,{type:"button"}))},max:Ls,min:0,onClick:null,onChange:null,onKeyPress:null,onSliderDragEnd:null,onSliderDragMove:null,onSliderDragStart:null,onValuesUpdated:null,orientation:"horizontal",pitComponent:null,pitPoints:[],progressBar:"div",snap:!1,snapPoints:[],values:[0]});function Bs(e){var t=e.style,n=e.children,r=Math.round(parseFloat(t.left)),i=[0,50,100].includes(r),a=n,s=Math.round(100*parseInt(a,10))/100;return Kn("div",{style:W(W({},t),{},{marginLeft:100===r?"-2px":0}),className:Ei("rheostat-marker","rheostat-marker-horizontal",{"rheostat-marker-large":i})},i&&Kn("div",{className:"rheostat-value"},s))}function Us(e){var t=e.cssClasses,n=e.templates,r=e.isRelevantSorted,i=e.isVirtualReplica,a=e.refine;return i?Kn("div",{className:t.root},Kn(ki,{templateKey:"text",templates:n,rootProps:{className:t.text},data:{isRelevantSorted:r}}),Kn("button",{type:"button",className:t.button,onClick:function(){a(r?0:void 0)}},Kn(ki,{rootTagName:"span",templateKey:"button",templates:n,data:{isRelevantSorted:r}}))):null}function qs(e){var t=e.nbHits,n=e.nbSortedHits,r=e.cssClasses,i=e.templateProps,a=j(e,["nbHits","nbSortedHits","cssClasses","templateProps"]);return Kn("div",{className:Ei(r.root)},Kn(ki,h({},i,{templateKey:"text",rootTagName:"span",rootProps:{className:r.text},data:W({hasManySortedResults:n&&1<n,hasNoSortedResults:0===n,hasOneSortedResults:1===n,hasManyResults:1<t,hasNoResults:0===t,hasOneResult:1===t,nbHits:t,nbSortedHits:n,cssClasses:r},a)})))}function Qs(e){var t=e.currentRefinement,n=e.refine,r=e.cssClasses,i=e.templateProps;return Kn("div",{className:r.root},Kn("label",{className:r.label},Kn("input",{className:r.checkbox,type:"checkbox",checked:t.isRefined,onChange:function(e){return n({isRefined:!e.target.checked})}}),Kn(ki,h({},i,{rootTagName:"span",rootProps:{className:r.labelText},templateKey:"labelText",data:t}))))}function Vs(e){var t=e.cssClasses,n=e.isBrowserSupported,r=e.isListening,i=e.toggleListening,a=e.voiceListeningState,s=e.templates,o=a.status,c=a.transcript,u=a.isSpeechFinal,l=a.errorCode;return Kn("div",{className:t.root},Kn(ki,{templateKey:"buttonText",rootTagName:"button",rootProps:{className:t.button,type:"button",title:"Search by voice".concat(n?"":" (not supported on this browser)"),onClick:function(e){e.currentTarget instanceof HTMLElement&&e.currentTarget.blur(),i()},disabled:!n},data:{status:o,errorCode:l,isListening:r,transcript:c,isSpeechFinal:u,isBrowserSupported:n},templates:s}),Kn(ki,{templateKey:"status",rootProps:{className:t.status},data:{status:o,errorCode:l,isListening:r,transcript:c,isSpeechFinal:u,isBrowserSupported:n},templates:s}))}var $s=function(){L(a,Yn);var i=O(a);function a(){var n;C(this,a);for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return k(M(n=i.call.apply(i,[this].concat(t))),"handleChange",function(e){var t=e.values;n.isDisabled||n.props.refine(t)}),k(M(n),"createHandleComponent",function(r){return function(e){var t=Math.round(100*parseFloat(e["aria-valuenow"]))/100,n="object"===f(r)&&r.format?r.format(t):t;return Kn("div",h({},e,{className:Ei(e.className,{"rheostat-handle-lower":0===e["data-handle-key"],"rheostat-handle-upper":1===e["data-handle-key"]})}),r&&Kn("div",{className:"rheostat-tooltip"},n))}}),n}return E(a,[{key:"isDisabled",get:function(){return this.props.min>=this.props.max}},{key:"computeDefaultPitPoints",value:function(e){var t=e.min,n=e.max,r=(n-t)/34;return[t].concat(P(He({end:33}).map(function(e){return t+r*(e+1)})),[n])}},{key:"computeSnapPoints",value:function(e){var t=e.min,n=e.max,r=e.step;if(r)return[].concat(P(He({start:t,end:n,step:r})),[n])}},{key:"render",value:function(){var e=this.props,t=e.tooltips,n=e.step,r=e.pips,i=e.values,a=e.cssClasse
12479s,s=this.isDisabled?{min:this.props.min,max:this.props.max+.001}:this.props,o=s.min,c=s.max,u=this.computeSnapPoints({min:o,max:c,step:n}),l=!1===r?[]:this.computeDefaultPitPoints({min:o,max:c});return Kn("div",{className:Ei(a.root,k({},a.disabledRoot,this.isDisabled))},Kn(Ds,{handle:this.createHandleComponent(t),onChange:this.handleChange,min:o,max:c,pitComponent:Bs,pitPoints:l,snap:!0,snapPoints:u,values:this.isDisabled?[o,c]:i,disabled:this.isDisabled}))}}]),a}(),Ks=st({name:"range-slider"}),zs=Ft("RangeSlider"),Js={item:'{{#count}}<a class="{{cssClasses.link}}" aria-label="{{value}} & up" href="{{url}}">{{/count}}{{^count}}<div class="{{cssClasses.link}}" aria-label="{{value}} & up" disabled>{{/count}}\n  {{#stars}}<svg class="{{cssClasses.starIcon}} {{#.}}{{cssClasses.fullStarIcon}}{{/.}}{{^.}}{{cssClasses.emptyStarIcon}}{{/.}}" aria-hidden="true" width="24" height="24">\n    {{#.}}<use xlink:href="#ais-RatingMenu-starSymbol"></use>{{/.}}{{^.}}<use xlink:href="#ais-RatingMenu-starEmptySymbol"></use>{{/.}}\n  </svg>{{/stars}}\n  <span class="{{cssClasses.label}}">& Up</span>\n  {{#count}}<span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span>{{/count}}\n{{#count}}</a>{{/count}}{{^count}}</div>{{/count}}'},Ys=st({name:"rating-menu"}),Xs=Ft("RatingMenu"),Gs=Kn("path",{d:"M12 .288l2.833 8.718h9.167l-7.417 5.389 2.833 8.718-7.416-5.388-7.417 5.388 2.833-8.718-7.416-5.389h9.167z"}),Zs=Kn("path",{d:"M12 6.76l1.379 4.246h4.465l-3.612 2.625 1.379 4.246-3.611-2.625-3.612 2.625 1.379-4.246-3.612-2.625h4.465l1.38-4.246zm0-6.472l-2.833 8.718h-9.167l7.416 5.389-2.833 8.718 7.417-5.388 7.416 5.388-2.833-8.718 7.417-5.389h-9.167l-2.833-8.718z"}),eo={reset:'\n<svg class="{{cssClasses.resetIcon}}" viewBox="0 0 20 20" width="10" height="10">\n  <path d="M8.114 10L.944 2.83 0 1.885 1.886 0l.943.943L10 8.113l7.17-7.17.944-.943L20 1.886l-.943.943-7.17 7.17 7.17 7.17.943.944L18.114 20l-.943-.943-7.17-7.17-7.17 7.17-.944.943L0 18.114l.943-.943L8.113 10z"></path>\n</svg>\n  ',submit:'\n<svg class="{{cssClasses.submitIcon}}" width="10" height="10" viewBox="0 0 40 40">\n  <path d="M26.804 29.01c-2.832 2.34-6.465 3.746-10.426 3.746C7.333 32.756 0 25.424 0 16.378 0 7.333 7.333 0 16.378 0c9.046 0 16.378 7.333 16.378 16.378 0 3.96-1.406 7.594-3.746 10.426l10.534 10.534c.607.607.61 1.59-.004 2.202-.61.61-1.597.61-2.202.004L26.804 29.01zm-10.426.627c7.323 0 13.26-5.936 13.26-13.26 0-7.32-5.937-13.257-13.26-13.257C9.056 3.12 3.12 9.056 3.12 16.378c0 7.323 5.936 13.26 13.258 13.26z"></path>\n</svg>\n  ',loadingIndicator:'\n<svg class="{{cssClasses.loadingIcon}}" width="16" height="16" viewBox="0 0 38 38" stroke="#444">\n  <g fill="none" fillRule="evenodd">\n    <g transform="translate(1 1)" strokeWidth="2">\n      <circle strokeOpacity=".5" cx="18" cy="18" r="18" />\n      <path d="M36 18c0-9.94-8.06-18-18-18">\n        <animateTransform\n          attributeName="transform"\n          type="rotate"\n          from="0 18 18"\n          to="360 18 18"\n          dur="1s"\n          repeatCount="indefinite"\n        />\n      </path>\n    </g>\n  </g>\n</svg>\n  '},to={item:'<label class="{{cssClasses.label}}">\n  <input type="checkbox"\n         class="{{cssClasses.checkbox}}"\n         value="{{value}}"\n         {{#isRefined}}checked{{/isRefined}} />\n  <span class="{{cssClasses.labelText}}">{{#isFromSearch}}{{{highlighted}}}{{/isFromSearch}}{{^isFromSearch}}{{highlighted}}{{/isFromSearch}}</span>\n  <span class="{{cssClasses.count}}">{{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}</span>\n</label>',showMoreText:"\n    {{#isShowingMore}}\n      Show less\n    {{/isShowingMore}}\n    {{^isShowingMore}}\n      Show more\n    {{/isShowingMore}}\n    ",searchableNoResults:"No results"},no=st({name:"refinement-list"}),ro=Ft("RefinementList"),io=Ft("SearchBox"),ao={text:"",button:function(e){return e.isRelevantSorted?"See all results":"See relevant results"}},so=st({name:"relevant-sort"}),oo=Ft("RelevantSort"),co=st({name:"search-box"}),uo=Ft("SearchBox"),lo=st({name:"sort-by"}),ho=Ft("SortBy"),fo=st({name:"stats"}),mo=Ft("Stats"),po={text:"\n    {{#areHitsSorted}}\n      {{#hasNoSortedResults}}No relevant results{{/hasNoSortedResults}}\n      {{#hasOneSortedResults}}1 relevant result{{/hasOneSortedResults}}\n      {{#hasManySortedResults}}{{#helpers.formatNumber}}{{nbSortedHits}}{{/helpers.formatNumber}} relevant results{{/hasManySortedResults}}\n      sorted out of {{#helpers.formatNumber}}{{nbHits}}{{/helpers.formatNumber}}\n    {{/areHitsSorted}}\n    {{^areHitsSorted}}\n      {{#hasNoResults}}No results{{/hasNoResults}}\n      {{#hasOneResult}}1 result{{/hasOneResult}}\n      {{#hasManyResults}}{{#helpers.formatNumber}}{{nbHits}}{{/helpers.formatNumber}} results{{/hasManyResults}}\n    {{/areHitsSorted}}\n    found in {{processingTimeMS}}ms"},go={labelText:"{{name}}"},vo=st({name:"toggle-refinement"}),yo=Ft("ToggleRefinement"),bo={buttonText:function(e){var t=e.status,n=e.errorCode,r=e.isListening;return'<svg\n       width="16"\n       height="16"\n       viewB
12479ox="0 0 24 24"\n       fill="none"\n       stroke="currentColor"\n       stroke-width="2"\n       stroke-linecap="round"\n       stroke-linejoin="round"\n     >\n       '.concat(function(e,t,n){return"error"===e&&"not-allowed"===t?'<line x1="1" y1="1" x2="23" y2="23"></line>\n            <path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"></path>\n            <path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"></path>\n            <line x1="12" y1="19" x2="12" y2="23"></line>\n            <line x1="8" y1="23" x2="16" y2="23"></line>':'<path\n            d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"\n            fill="'.concat(n?"currentColor":"none",'">\n          </path>\n          <path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>\n          <line x1="12" y1="19" x2="12" y2="23"></line>\n          <line x1="8" y1="23" x2="16" y2="23"></line>')}(t,n,r),"\n     </svg>")},status:"<p>{{transcript}}</p>"},So=st({name:"voice-search"}),Ro=Ft("VoiceSearch"),wo=je(Gi),_o=Object.freeze({__proto__:null,dynamicWidgets:Gi,EXPERIMENTAL_dynamicWidgets:wo,analytics:function(e){var t=e||{},s=t.pushFunction,n=t.delay,r=void 0===n?3e3:n,i=t.triggerOnUIInteraction,a=void 0!==i&&i,o=t.pushInitialSearch,c=void 0===o||o,u=t.pushPagination,l=void 0!==u&&u;if(!s)throw new Error(Ci("The `pushFunction` option is required."));function d(e){if(null!==e){var t=[],n=function(e){var t=[];for(var n in e)if(e.hasOwnProperty(n)){var r=e[n].join("+");t.push("".concat(encodeURIComponent(n),"=").concat(encodeURIComponent(n),"_").concat(encodeURIComponent(r)))}return t.join("&")}(W(W(W({},e.state.disjunctiveFacetsRefinements),e.state.facetsRefinements),e.state.hierarchicalFacetsRefinements)),r=function(e){var t=[];for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(r.hasOwnProperty(">=")&&r.hasOwnProperty("<="))r[">="]&&r[">="][0]===r["<="]&&r["<="][0]?t.push("".concat(n,"=").concat(n,"_").concat(r[">="])):t.push("".concat(n,"=").concat(n,"_").concat(r[">="],"to").concat(r["<="]));else if(r.hasOwnProperty(">="))t.push("".concat(n,"=").concat(n,"_from").concat(r[">="]));else if(r.hasOwnProperty("<="))t.push("".concat(n,"=").concat(n,"_to").concat(r["<="]));else if(r.hasOwnProperty("=")){var i=[];for(var a in r["="])r["="].hasOwnProperty(a)&&i.push(r["="][a]);t.push("".concat(n,"=").concat(n,"_").concat(i.join("-")))}}return t.join("&")}(e.state.numericRefinements);""!==n&&t.push(n),""!==r&&t.push(r);var i=t.join("&"),a="Query: ".concat(e.state.query||"",", ").concat(i);!0===l&&(a+=", Page: ".concat(e.state.page||0)),m!==a&&(s(i,e.state,e.results),m=a)}}var h,f=null,m="",p=!0;!0===c&&(p=!1);function g(){d(f)}function v(){d(f)}return{$$type:"ais.analytics",$$widgetType:"ais.analytics",init:function(){!0===a&&(document.addEventListener("click",g),window.addEventListener("beforeunload",v))},render:function(e){var t=e.results,n=e.state;!0!==p?(f={results:t,state:n},h&&clearTimeout(h),h=window.setTimeout(function(){return d(f)},r)):p=!1},dispose:function(){!0===a&&(document.removeEventListener("click",g),window.removeEventListener("beforeunload",v))},getRenderState:function(e,t){return W(W({},e),{},{analytics:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{widgetParams:e}}}},breadcrumb:function(e){var t=e||{},n=t.container,r=t.attributes,i=t.separator,a=t.rootPath,s=t.transformItems,o=t.templates,c=void 0===o?{}:o,u=t.cssClasses,l=void 0===u?{}:u;if(!n)throw new Error(Wi("The `container` option is required."));var d=ye(n),h={root:Ei(Di(),l.root),noRefinementRoot:Ei(Di({modifierName:"noRefinement"}),l.noRefinementRoot),list:Ei(Di({descendantName:"list"}),l.list),item:Ei(Di({descendantName:"item"}),l.item),selectedItem:Ei(Di({descendantName:"item",modifierName:"selected"}),l.selectedItem),separator:Ei(Di({descendantName:"separator"}),l.separator),link:Ei(Di({descendantName:"link"}),l.link)},f=function(e){var o=e.containerNode,c=e.cssClasses,u=e.renderState,l=e.templates;return function(e,t){var n=e.canRefine,r=e.createURL,i=e.instantSearchInstance,a=e.items,s=e.refine;t?u.templateProps=Re({defaultTemplates:Hi,templatesConfig:i.templatesConfig,templates:l}
vendor: 4,184 bytes, line 12479
12479):fr(Kn(Li,{canRefine:n,cssClasses:c,createURL:r,items:a,refine:s,templateProps:u.templateProps}),o)}}({containerNode:d,cssClasses:h,renderState:{},templates:c});return W(W({},$r(f,function(){return fr(null,d)})({attributes:r,separator:i,rootPath:a,transformItems:s})),{},{$$widgetType:"ais.breadcrumb"})},clearRefinements:function(e){var t=e||{},n=t.container,r=t.templates,i=void 0===r?{}:r,a=t.includedAttributes,s=t.excludedAttributes,o=t.transformItems,c=t.cssClasses,u=void 0===c?{}:c;if(!n)throw new Error(Ui("The `container` option is required."));var l=ye(n),d={root:Ei(qi(),u.root),button:Ei(qi({descendantName:"button"}),u.button),disabledButton:Ei(qi({descendantName:"button",modifierName:"disabled"}),u.disabledButton)},h=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.refine,r=e.hasRefinements,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:Bi,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(ji,{refine:n,cssClasses:s,hasRefinements:r,templateProps:o.templateProps}),a)}}({containerNode:l,cssClasses:d,renderState:{},templates:i});return W(W({},Sn(h,function(){return fr(null,l)})({includedAttributes:a,excludedAttributes:s,transformItems:o})),{},{$$widgetType:"ais.clearRefinements"})},configure:function(e){return W(W({},hi(Le)({searchParameters:e})),{},{$$widgetType:"ais.configure"})},currentRefinements:function(e){var t=e||{},n=t.container,r=t.includedAttributes,i=t.excludedAttributes,a=t.cssClasses,s=void 0===a?{}:a,o=t.transformItems;if(!n)throw new Error(Qi("The `container` option is required."));var c=ye(n),u={root:Ei(Vi(),s.root),list:Ei(Vi({descendantName:"list"}),s.list),item:Ei(Vi({descendantName:"item"}),s.item),label:Ei(Vi({descendantName:"label"}),s.label),category:Ei(Vi({descendantName:"category"}),s.category),categoryLabel:Ei(Vi({descendantName:"categoryLabel"}),s.categoryLabel),delete:Ei(Vi({descendantName:"delete"}),s.delete)};return W(W({},_n(Oi,function(){return fr(null,c)})({container:c,cssClasses:u,includedAttributes:r,excludedAttributes:i,transformItems:o})),{},{$$widgetType:"ais.currentRefinements"})},EXPERIMENTAL_answers:function(e){var t=e||{},n=t.container,r=t.attributesForPrediction,i=t.queryLanguages,a=t.nbHits,s=t.searchDebounceTime,o=t.renderDebounceTime,c=t.escapeHTML,u=t.extraParameters,l=t.templates,d=void 0===l?{}:l,h=t.cssClasses,f=void 0===h?{}:h;if(!n)throw new Error(Ki("The `container` option is required."));var m=ye(n),p={root:Ei(zi(),f.root),emptyRoot:Ei(zi({modifierName:"empty"}),f.emptyRoot),header:Ei(zi({descendantName:"header"}),f.header),loader:Ei(zi({descendantName:"loader"}),f.loader),list:Ei(zi({descendantName:"list"}),f.list),item:Ei(zi({descendantName:"item"}),f.item)},g=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.hits,r=e.isLoading,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:$i,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(Ai,{cssClasses:s,hits:n,isLoading:r,templateProps:o.templateProps}),a)}}({containerNode:m,cssClasses:p,templates:d,renderState:{}});return W(W({},_i(g,function(){return fr(null,m)})({attributesForPrediction:r,queryLanguages:i,nbHits:a,searchDebounceTime:s,renderDebounceTime:o,escapeHTML:c,extraParameters:u})),{},{$$widgetType:"ais.answers"})},EXPERIMENTAL_configureRelatedItems:function(e){return W(W({},pi(Le)(e)),{},{$$widgetType:"ais.configureRelatedItems"})},geoSearch:function(e){var t=e||{},n=t.initialZoom,r=void 0===n?1:n,i=t.initialPosition,a=void 0===i?{lat:0,lng:0}:i,s=t.templates,o=void 0===s?{}:s,c=t.cssClasses,u=void 0===c?{}:c,l=t.builtInMarker,d=void 0===l?{}:l,h=t.customHTMLMarker,f=t.enableRefine,m=void 0===f||f,p=t.enableClearMapRefinement,g=void 0===p||p,v=t.enableRefineControl,y=void 0===v||v,b=t.container,S=t.googleReference,R=j(t,["initialZoom","initialPosition","templates","cssClasses","builtInMarker","customHTMLMarker","enableRefine","enableClearMapRefinement","enableRefineControl","container","googleReference"]);if(!b)throw new Error(sa("The `container` option is required."));if(!S)throw new Error(sa("The `googleReference` option is required."));
12479var w=ye(b),_={root:Ei(oa(),u.root),tree:oa({descendantName:"tree"}),map:Ei(oa({descendantName:"map"}),u.map),control:Ei(oa({descendantName:"control"}),u.control),label:Ei(oa({descendantName:"label"}),u.label),selectedLabel:Ei(oa({descendantName:"label",modifierName:"selected"}),u.selectedLabel),input:Ei(oa({descendantName:"input"}),u.input),redo:Ei(oa({descendantName:"redo"}),u.redo),disabledRedo:Ei(oa({descendantName:"redo",modifierName:"disabled"}),u.disabledRedo),reset:Ei(oa({descendantName:"reset"}),u.reset)},P=W(W({},aa),o),x=W(W({},{createOptions:function(){return{}},events:{}}),d),N=(Boolean(h)||Boolean(o.HTMLMarker))&&W(W({},{createOptions:function(){return{}},events:{}}),h),I=function(d){return function(){L(l,d.maps.OverlayView);var u=O(l);function l(e){var t,n=e.__id,r=e.position,i=e.map,a=e.template,s=e.className,o=e.anchor,c=void 0===o?{x:0,y:0}:o;return C(this,l),k(M(t=u.call(this)),"__id",void 0),k(M(t),"anchor",void 0),k(M(t),"offset",void 0),k(M(t),"listeners",void 0),k(M(t),"latLng",void 0),k(M(t),"element",void 0),t.__id=n,t.anchor=c,t.listeners={},t.latLng=new d.maps.LatLng(r),t.element=document.createElement("div"),t.element.className=s,t.element.style.position="absolute",t.element.innerHTML=a,t.setMap(i),t}return E(l,[{key:"onAdd",value:function(){this.getPanes().overlayMouseTarget.appendChild(this.element);var e=this.element.getBoundingClientRect();this.offset={x:this.anchor.x+e.width/2,y:this.anchor.y+e.height},this.element.style.width="".concat(e.width,"px")}},{key:"draw",value:function(){var e=this.getProjection().fromLatLngToDivPixel(this.latLng);this.element.style.left="".concat(Math.round(e.x-this.offset.x),"px"),this.element.style.top="".concat(Math.round(e.y-this.offset.y),"px"),this.element.style.zIndex=String(parseInt(this.element.style.top,10))}},{key:"onRemove",value:function(){var t=this;this.element&&(this.element.parentNode.removeChild(this.element),Object.keys(this.listeners).forEach(function(e){t.element.removeEventListener(e,t.listeners[e])}),delete this.element,delete this.listeners)}},{key:"addListener",value:function(e,t){this.listeners[e]=t;var n=this.element;return n.addEventListener(e,t),{remove:function(){return n.removeEventListener(e,t)}}}},{key:"getPosition",value:function(){return this.latLng}}]),l}()}(S),F=N?function(e){var t=e.item,n=j(e,["item"]);return new I(W(W(W({},N.createOptions(t)),n),{},{__id:t.objectID,position:t._geoloc,className:Ei(oa({descendantName:"marker"})),template:Ne({templateKey:"HTMLMarker",templates:P,data:t})}))}:function(e){var t=e.item,n=j(e,["item"]);return new S.maps.Marker(W(W(W({},x.createOptions(t)),n),{},{__id:t.objectID,position:t._geoloc}))},T=N||x;return W(W({},si(ia,function(){return fr(null,w)})(W(W({},R),{},{renderState:{},container:w,googleReference:S,initialZoom:r,initialPosition:a,templates:P,cssClasses:_,createMarker:F,markerOptions:T,enableRefine:m,enableClearMapRefinement:g,enableRefineControl:y}))),{},{$$widgetType:"ais.geoSearch"})},hierarchicalMenu:function(e){var t=e||{},n=t.container,r=t.attributes,i=t.separator,a=t.rootPath,s=t.showParentLevel,o=t.limit,c=t.showMore,u=void 0!==c&&c,l=t.showMoreLimit,d=t.sortBy,h=t.transformItems,f=t.templates,m=void 0===f?{}:f,p=t.cssClasses,g=void 0===p?{}:p;if(!n)throw new Error(ma("The `container` option is required."));var v=ye(n),y=function(e){var u=e.cssClasses,l=e.containerNode,d=e.showMore,h=e.templates,f=e.renderState;return function(e,t){var n=e.createURL,r=e.items,i=e.refine,a=e.instantSearchInstance,s=e.isShowingMore,o=e.toggleShowMore,c=e.canToggleShowMore;t?f.templateProps=Re({defaultTemplates:fa,templatesConfig:a.templatesConfig,templates:h}):fr(Kn(ha,{createURL:n,cssClasses:u,facetValues:r,templateProps:f.templateProps,toggleRefinement:i,showMore:d,toggleShowMore:o,isShowingMore:s,canToggleShowMore:c}),l)}}({cssClasses:{root:Ei(pa(),g.root),noRefinementRoot:Ei(pa({modifierName:"noRefinement"}),g.noRefinementRoot),list:Ei(pa({descendantName:"list"}),g.list),childList:Ei(pa({descendantName:"list",modifierName:"child"}),g.childList),item:Ei(pa({descendantName:"item"}
vendor: 11,282 bytes, line 12479
12479),g.item),selectedItem:Ei(pa({descendantName:"item",modifierName:"selected"}),g.selectedItem),parentItem:Ei(pa({descendantName:"item",modifierName:"parent"}),g.parentItem),link:Ei(pa({descendantName:"link"}),g.link),label:Ei(pa({descendantName:"label"}),g.label),count:Ei(pa({descendantName:"count"}),g.count),showMore:Ei(pa({descendantName:"showMore"}),g.showMore),disabledShowMore:Ei(pa({descendantName:"showMore",modifierName:"disabled"}),g.disabledShowMore)},containerNode:v,templates:m,showMore:u,renderState:{}});return W(W({},Tn(y,function(){return fr(null,v)})({attributes:r,separator:i,rootPath:a,showParentLevel:s,limit:o,showMore:u,showMoreLimit:l,sortBy:d,transformItems:h})),{},{$$widgetType:"ais.hierarchicalMenu"})},hits:function(e){var t=e||{},n=t.container,r=t.escapeHTML,i=t.transformItems,a=t.templates,s=void 0===a?{}:a,o=t.cssClasses,c=void 0===o?{}:o;if(!n)throw new Error(va("The `container` option is required."));var u=ye(n),l={root:Ei(ya(),c.root),emptyRoot:Ei(ya({modifierName:"empty"}),c.emptyRoot),list:Ei(ya({descendantName:"list"}),c.list),item:Ei(ya({descendantName:"item"}),c.item)},d=function(e){var o=e.renderState,c=e.cssClasses,u=e.containerNode,l=e.templates;return function(e,t){var n=e.hits,r=e.results,i=e.instantSearchInstance,a=e.insights,s=e.bindEvent;t?o.templateProps=Re({defaultTemplates:ga,templatesConfig:i.templatesConfig,templates:l}):fr(Kn(ba,{cssClasses:c,hits:n,results:r,templateProps:o.templateProps,insights:a,sendEvent:function(e){i.sendEventToInsights(e)},bindEvent:s}),u)}}({containerNode:u,cssClasses:l,renderState:{},templates:s});return W(W({},Mn(Cn)(d,function(){return fr(null,u)})({escapeHTML:r,transformItems:i})),{},{$$widgetType:"ais.hits"})},hitsPerPage:function(e){var t=e||{},n=t.container,r=t.items,i=t.cssClasses,a=void 0===i?{}:i,s=t.transformItems;if(!n)throw new Error(Ra("The `container` option is required."));var o=ye(n),c={root:Ei(wa(),a.root),select:Ei(wa({descendantName:"select"}),a.select),option:Ei(wa({descendantName:"option"}),a.option)},u=function(e){var a=e.containerNode,s=e.cssClasses;return function(e,t){var n=e.items,r=e.refine;if(!t){var i=(Ie(n,function(e){return e.isRefined})||{}).value;fr(Kn("div",{className:s.root},Kn(Sa,{cssClasses:s,currentValue:i,options:n,setValue:r})),a)}}}({containerNode:o,cssClasses:c});return W(W({},gr(u,function(){return fr(null,o)})({items:r,transformItems:s})),{},{$$widgetType:"ais.hitsPerPage"})},index:Nt,infiniteHits:function(e){var t=e||{},n=t.container,r=t.escapeHTML,i=t.transformItems,a=t.templates,s=void 0===a?{}:a,o=t.cssClasses,c=void 0===o?{}:o,u=t.showPrevious,l=t.cache;if(!n)throw new Error(Pa("The `container` option is required."));var d=ye(n),h={root:Ei(xa(),c.root),emptyRoot:Ei(xa({modifierName:"empty"}),c.emptyRoot),item:Ei(xa({descendantName:"item"}),c.item),list:Ei(xa({descendantName:"list"}),c.list),loadPrevious:Ei(xa({descendantName:"loadPrevious"}),c.loadPrevious),disabledLoadPrevious:Ei(xa({descendantName:"loadPrevious",modifierName:"disabled"}),c.disabledLoadPrevious),loadMore:Ei(xa({descendantName:"loadMore"}),c.loadMore),disabledLoadMore:Ei(xa({descendantName:"loadMore",modifierName:"disabled"}),c.disabledLoadMore)},f=function(e){var d=e.containerNode,h=e.cssClasses,f=e.renderState,m=e.templates,p=e.showPrevious;return function(e,t){var n=e.hits,r=e.results,i=e.showMore,a=e.showPrevious,s=e.isFirstPage,o=e.isLastPage,c=e.instantSearchInstance,u=e.insights,l=e.bindEvent;t?f.templateProps=Re({defaultTemplates:_a,templatesConfig:c.templatesConfig,templates:m}):fr(Kn(Na,{cssClasses:h,hits:n,results:r,hasShowPrevious:p,showPrevious:a,showMore:i,templateProps:f.templateProps,isFirstPage:s,isLastPage:o,insights:u,sendEvent:function(e){c.sendEventToInsights(e)},bindEvent:l}),d)}}({containerNode:d,cssClasses:h,templates:s,showPrevious:u,renderState:{}});return W(W({},Mn(Rr)(f,function(){return fr(null,d)})({escapeHTML:r,transformItems:i,showPrevious:u,cache:l})),{},{$$widgetType:"ais.infiniteHits"})},menu:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.sortBy,a=t.limit,s=t.showMore,o=t.showMoreLimit,c=t.cssClasses,u=void 0===c?{}:c,l=t.templates,d=void 0===l?{}:l,h=t.transformItems;if(!n)throw new Error(Fa("The `container` option is required."));var f=ye(n),m={root:Ei(Ta(),u.root),noRefinementRoot:Ei(Ta({modifierName:"noRefinement"}),u.noRefinementRoot),list:Ei(Ta({descendantName:"list"}),u.list),item:Ei(Ta({descendantName:"item"}),u.item),selectedItem:Ei(Ta({descendantName:"item",modifierName:"selected"}),u.selectedItem),link:Ei(Ta({descendantName:"link"}),u.link),label:Ei(Ta({descendantName:"label"}),u.label),count:Ei(Ta({descendantName:"count"}),u.count),showMore:Ei(Ta({descendantName:"showMore"}),u.showMore),disabledShowMore:Ei(Ta({descendantName:"showMore",modifierName:"disabled"}),u.disabledShowMore)},p=function(e){var l=e.containerNode,d=e.cssClasses,h=e.renderState,f=e.templates,m=e.showMore;return function(e,t){var n=e.refine,r=e.items,i=e.createURL,a=e.instantSearchInstance,s=e.isShowingMore,o=e.toggleShowMore,c=e.canToggleShowMore;if(t)h.templateProps=Re({defaultTemplates:Ia,templatesConfig:a.templatesConfig,templates:f});else{var u=r.map(function(e){return W(W({},e),{},{url:i(e.value)})});fr(Kn(ha,{createURL:i,cssClasses:d,facetValues:u,showMore:m,templateProps:h.templateProps,toggleRefinement:n,toggleShowMore:o,isShowingMore:s,canToggleShowMore:c}),l)}}}({containerNode:f,cssClasses:m,renderState:{},templates:d,showMore:s});return W(W({},wr(p,function(){return fr(null,f)})({attribute:r,limit:a,showMore:s,showMoreLimit:o,sortBy:i,transformItems:h})),{},{$$widgetType:"ais.menu"})},menuSelect:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.sortBy,a=void 0===i?["name:asc"]:i,s=t.limit,o=void 0===s?10:s,c=t.cssClasses,u=void 0===c?{}:c,l=t.templates,d=void 0===l?{}:l,h=t.transformItems;if(!n)throw new Error(ka("The `container` option is required."));var f=ye(n),m={root:Ei(La(),u.root),noRefinementRoot:Ei(La({modifierName:"noRefinement"}),u.noRefinementRoot),select:Ei(La({descendantName:"select"}),u.select),option:Ei(La({descendantName:"option"}),u.option)},p=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.refine,r=e.items,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:Ea,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(Ca,{cssClasses:s,items:r,refine:n,templateProps:o.templateProps}),a)}}({containerNode:f,cssClasses:m,renderState:{},templates:d});return W(W({},wr(p,function(){return fr(null,f)})({attribute:r,limit:o,sortBy:a,transformItems:h})),{},{$$widgetType:"ais.menuSelect"})},numericMenu:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.items,a=t.cssClasses,s=void 0===a?{}:a,o=t.templates,c=void 0===o?{}:o,u=t.transformItems;if(!n)throw new Error(Ma("The `container` option is required."));var l=ye(n),d={root:Ei(Oa(),s.root),noRefinementRoot:Ei(Oa({modifierName:"noRefinement"}),s.noRefinementRoot),list:Ei(Oa({descendantName:"list"}),s.list),item:Ei(Oa({descendantName:"item"}),s.item),selectedItem:Ei(Oa({descendantName:"item",modifierName:"selected"}),s.selectedItem),label:Ei(Oa({descendantName:"label"}),s.label),radio:Ei(Oa({descendantName:"radio"}),s.radio),labelText:Ei(Oa({descendantName:"labelText"}),s.labelText)},h=function(e){var s=e.containerNode,o=e.attribute,c=e.cssClasses,u=e.renderState,l=e.templates;return function(e,t){var n=e.createURL,r=e.instantSearchInstance,i=e.refine,a=e.items;t?u.templateProps=Re({defaultTemplates:ja,templatesConfig:r.templatesConfig,templates:l}):fr(Kn(ha,{createURL:n,cssClasses:c,facetValues:a,templateProps:u.templateProps,toggleRefinement:i,attribute:o}),s)}}({containerNode:l,attribute:r,cssClasses:d,renderState:{},templates:c});return W(W({},_r(h,function(){return fr(null,l)})({attribute:r,items:i,transformItems:u})),{},{$$widgetType:"ais.numericMenu"})},pagination:function(e){var t=e||{},n=t.container,r=t.templates,i=void 0===r?{}:r,a=t.cssClasses,s=void 0===a?{}:a,o=t.totalPages,c=t.padding,u=t.showFirst,l=void 0===u||u,d=t.showLast,h=void 0===d||d,f=t.showPrevious,m=void 0===f||f,p=t.showNext,g=void 0===p||p,v=t.scrollTo,y=void 0===v?"body":v;if(!n)throw new Error(qa("The `container` option is required."));var b=ye(n),S=!0===y?"body":y,R=!1!==S&&ye(S),w={root:Ei(Ua(),s.root),noRefinementRoot:Ei(Ua({modifierName:"noRefinement"}),s.noRefinementRoot),list:Ei(Ua({descendantName:"list"}),s.list),item:Ei(Ua({descendantName:"item"}),s.item),firstPageItem:Ei(Ua({descendantName:"item",modifierName:"firstPage"}),s.firstPageItem),lastPageItem:Ei(Ua({descendantName:"item",modifierName:"lastPage"}),s.lastPageItem),previousPageItem:Ei(Ua({descendantName:"item",modifierName:"previousPage"}),s.previousPageItem),nextPageItem:Ei(Ua({descendantName:"item",modifierName:"nextPage"}),s.nextPageItem),pageItem:Ei(Ua({descendantName:"item",modifierName:"page"}),s.pageItem),selectedItem:Ei(Ua({descendantName:"item",modifierName:"selected"}),s.selectedItem),disabledItem:Ei(Ua({descendantName:"item",modifierName:"disabled"}),s.disabledItem),link:Ei(Ua({descendantName:"link"}),s.link)},_=W(W({},Qa),i),P=function(e){var u=e.containerNode,l=e.cssClasses,d=e.templates,h=e.showFirst,f=e.showLast,m=e.showPrevious,p=e.showNext,g=e.scrollToNode;return function(e,t){var n=e.createURL,r=e.currentRefinement,i=e.nbPages,a=e.pages,s=e.isFirstPage,o=e.isLastPage,c=e.refine;if(!t){fr(Kn(Aa,{createURL:n,cssClasses:l,currentPage:r,templates:d,nbPages:i,pages:a,isFirstPage:s,isLastPage:o,setCurrentPage:function(e){c(e),!1!==g&&g.scrollIntoView()},showFirst:h,showLast:f,showPrevious:m,showNext:p}),u)}}}({containerNode:b,cssClasses:w,templates:_,showFirst:l,showLast:h,showPrevious:m,showNext:g,scrollToNode:R});return W(W({},kr(P,function(){return fr(null,b)})({totalPages:o,padding:c})),{},{$$widgetType:"ais.pagination"})},panel:function(e){var t=e||{},n=t.templates,r=void 0===n?{}:n,i=t.hidden,c=void 0===i?function(){return!1}:i,a=t.collapsed,s=t.cssClasses,o=void 0===s?{}:s,u=document.createElement("div"),l=Boolean(a),d="function"==typeof a?a:function(){return!1},h={root:Ei(ds(),o.root),noRefinementRoot:Ei(ds({modifierName:"noRefinement"}),o.noRefinementRoot),collapsibleRoot:Ei(ds({modifierName:"collapsible"}),o.collapsibleRoot),collapsedRoot:Ei(ds({modifierName:"collapsed"}),o.collapsedRoot),collapseButton:Ei(ds({descendantName:"collapseButton"}),o.collapseButton),collapseIcon:Ei(ds({descendantName:"collapseIcon"}),o.collapseIcon),body:Ei(ds({descendantName:"body"}),o.body),header:Ei(ds({descendantName:"header"}),o.header),footer:Ei(ds({descendantName:"footer"}),o.footer)};return function(t){return function(e){if(!e||!e.container)throw new Error(ls("The `container` option is required in the widget within the panel."));var i=ye(e.container),s=function(e){var a=e.containerNode,s=e.bodyContainerNode,o=e.cssClasses,c=e.templates;return function(e){var t=e.options,n=e.hidden,r=e.collapsible,i=e.collapsed;fr(Kn(os,{cssClasses:o,hidden:n,collapsible:r,isCollapsed:i,templates:c,data:t,bodyElement:s}),a)}}({containerNode:i,bodyContainerNode:u,cssClasses:h,templates:W(W({},{header:"",footer:"",collapseButtonText:function(e){var t=e.collapsed;return'<svg\n          class="'.concat(h.collapseIcon,'"\n          width="1em"\n          height="1em"\n          viewB
12479ox="0 0 500 500"\n        >\n        <path d="').concat(t?"M100 250l300-150v300z":"M250 400l150-300H100z",'" fill="currentColor" />\n        </svg>')}}),r)}),o=t(W(W({},e),{},{container:u}));return W(W({},o),{},{init:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,i=t[0],a=W(W({},o.getWidgetRenderState?o.getWidgetRenderState(i):{}),i);s({options:a,hidden:!0,collapsible:l,collapsed:!1}),"function"==typeof o.init&&(r=o.init).call.apply(r,[this].concat(t))},render:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,i=t[0],a=W(W({},o.getWidgetRenderState?o.getWidgetRenderState(i):{}),i);s({options:a,hidden:Boolean(c(a)),collapsible:l,collapsed:Boolean(d(a))}),"function"==typeof o.render&&(r=o.render).call.apply(r,[this].concat(t))},dispose:function(){if(fr(null,i),"function"==typeof o.dispose){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=o.dispose).call.apply(e,[this].concat(n))}}})}}},places:function(e){var t=e||{},n=t.placesReference,r=t.defaultPosition,o=void 0===r?[]:r,i=j(t,["placesReference","defaultPosition"]);if("function"!=typeof n)throw new Error("The `placesReference` option requires a valid Places.js reference.");var c=n(i),u={query:"",initialLatLngViaIP:void 0,isInitialLatLngViaIPSet:!1};return{$$type:"ais.places",$$widgetType:"ais.places",init:function(e){var s=e.helper;c.on("change",function(e){var t=e.suggestion,n=t.value,r=t.latlng,i=r.lat,a=r.lng;u.query=n,s.setQueryParameter("insideBoundingBox",void 0).setQueryParameter("aroundLatLngViaIP",!1).setQueryParameter("aroundLatLng","".concat(i,",").concat(a)).search()}),c.on("clear",function(){u.query="",s.setQueryParameter("insideBoundingBox",void 0),1<o.length?s.setQueryParameter("aroundLatLngViaIP",!1).setQueryParameter("aroundLatLng",o.join(",")):s.setQueryParameter("aroundLatLngViaIP",u.initialLatLngViaIP).setQueryParameter("aroundLatLng",void 0),s.search()})},getWidgetUiState:function(e,t){var n=t.searchParameters.aroundLatLng||o.join(",");if(n!==o.join(",")||u.query)return W(W({},e),{},{places:{query:u.query,position:n}});e.places;return j(e,["places"])},getWidgetSearchParameters:function(e,t){var n=t.uiState.places||{},r=n.query,i=void 0===r?"":r,a=n.position,s=void 0===a?o.join(","):a;return u.query=i,u.isInitialLatLngViaIPSet||(u.isInitialLatLngViaIPSet=!0,u.initialLatLngViaIP=e.aroundLatLngViaIP),c.setVal(i),c.close(),e.setQueryParameter("insideBoundingBox",void 0).setQueryParameter("aroundLatLngViaIP",!1).setQueryParameter("aroundLatLng",s||void 0)},getRenderState:function(e,t){return W(W({},e),{},{places:this.getWidgetRenderState(t)})},getWidgetRenderState:function(){return{widgetParams:e}}}},poweredBy:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.theme,s=void 0===a?"light":a;if(!n)throw new Error(ps("The `container` option is required."));var o=ye(n),c={root:Ei(ms(),ms({modifierName:"dark"===s?"dark":"light"}),i.root),link:Ei(ms({descendantName:"link"}),i.link),logo:Ei(ms({descendantName:"logo"}),i.logo)},u=function(e){var a=e.containerNode,s=e.cssClasses;return function(e,t){var n=e.url,r=e.widgetParams;if(t){var i=r.theme;fr(Kn(cs,{cssClasses:s,url:n,theme:void 0===i?"light":i}),a)}else;}}
vendor: 8,349 bytes, line 12479
12479({containerNode:o,cssClasses:c});return W(W({},oi(u,function(){return fr(null,o)})({theme:s})),{},{$$widgetType:"ais.poweredBy"})},queryRuleContext:function(e){var t=0<arguments.length&&void 0!==e?e:{};if(!t.trackedFilters)throw new Error(gs("The `trackedFilters` option is required."));return W(W({},bi(Le)(t)),{},{$$widgetType:"ais.queryRuleContext"})},queryRuleCustomData:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.templates,s=void 0===a?{}:a,o=t.transformItems,c=void 0===o?function(e){return e}:o;if(!n)throw new Error(ys("The `container` option is required."));var u={root:Ei(bs(),i.root)},l=ye(n),d=W(W({},vs),s),h=function(e){var n=e.containerNode,r=e.cssClasses,i=e.templates;return function(e){var t=e.items;fr(Kn(us,{cssClasses:r,templates:i,items:t}),n)}}({containerNode:l,cssClasses:u,renderState:{},templates:d});return W(W({},bi(h,function(){fr(null,l)})({transformItems:c})),{},{$$widgetType:"ais.queryRuleCustomData"})},rangeInput:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.min,a=t.max,s=t.precision,o=void 0===s?0:s,c=t.cssClasses,u=void 0===c?{}:c,l=t.templates,d=void 0===l?{}:l;if(!n)throw new Error(Rs("The `container` option is required."));var h=ye(n),f={root:Ei(ws(),u.root),noRefinement:Ei(ws({modifierName:"noRefinement"})),form:Ei(ws({descendantName:"form"}),u.form),label:Ei(ws({descendantName:"label"}),u.label),input:Ei(ws({descendantName:"input"}),u.input),inputMin:Ei(ws({descendantName:"input",modifierName:"min"}),u.inputMin),inputMax:Ei(ws({descendantName:"input",modifierName:"max"}),u.inputMax),separator:Ei(ws({descendantName:"separator"}),u.separator),submit:Ei(ws({descendantName:"submit"}),u.submit)},m=function(e){var f=e.containerNode,m=e.cssClasses,p=e.renderState,g=e.templates;return function(e,t){var n=e.refine,r=e.range,i=e.start,a=e.widgetParams,s=e.instantSearchInstance;if(t)p.templateProps=Re({defaultTemplates:_s,templatesConfig:s.templatesConfig,templates:g});else{var o=r.min,c=r.max,u=D(i,2),l=u[0],d=u[1],h=1/Math.pow(10,a.precision||0);fr(Kn(Ss,{min:o,max:c,step:h,values:{min:l!==-1/0&&l!==o?l:void 0,max:d!==1/0&&d!==c?d:void 0},cssClasses:m,refine:n,templateProps:p.templateProps}),f)}}}({containerNode:h,cssClasses:f,templates:d,renderState:{}});return W(W({},Hr(m,function(){return fr(null,h)})({attribute:r,min:i,max:a,precision:o})),{},{$$type:"ais.rangeInput",$$widgetType:"ais.rangeInput"})},rangeSlider:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.min,a=t.max,s=t.cssClasses,o=void 0===s?{}:s,c=t.step,u=t.pips,l=void 0===u||u,d=t.precision,h=void 0===d?0:d,f=t.tooltips,m=void 0===f||f;if(!n)throw new Error(Ks("The `container` option is required."));var p=ye(n),g={root:Ei(zs(),o.root),disabledRoot:Ei(zs({modifierName:"disabled"}),o.disabledRoot)},v=function(e){var h=e.containerNode,f=e.cssClasses,m=e.pips,p=e.step,g=e.tooltips;return function(e,t){var n=e.refine,r=e.range,i=e.start;if(!t){var a=r.min,s=r.max,o=D(i,2),c=o[0],u=o[1],l=c===-1/0?a:c,d=u===1/0?s:u;fr(Kn($s,{cssClasses:f,refine:n,min:a,max:s,values:[s<l?s:l,d<a?a:d],tooltips:g,step:p,pips:m}),h)}}}({containerNode:p,step:c,pips:l,tooltips:m,cssClasses:g});return W(W({},Hr(v,function(){return fr(null,p)})({attribute:r,min:i,max:a,precision:h})),{},{$$type:"ais.rangeSlider",$$widgetType:"ais.rangeSlider"})},ratingMenu:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.max,a=void 0===i?5:i,s=t.cssClasses,o=void 0===s?{}:s,c=t.templates,u=void 0===c?{}:c;if(!n)throw new Error(Ys("The `container` option is required."));var l=ye(n),d={root:Ei(Xs(),o.root),noRefinementRoot:Ei(Xs({modifierName:"noRefinement"}),o.noRefinementRoot),list:Ei(Xs({descendantName:"list"}),o.list),item:Ei(Xs({descendantName:"item"}),o.item),selectedItem:Ei(Xs({descendantName:"item",modifierName:"selected"}),o.selectedItem),disabledItem:Ei(Xs({descendantName:"item",modifierName:"disabled"}),o.disabledItem),link:Ei(Xs({descendantName:"link"}),o.link),starIcon:Ei(Xs({descendantName:"starIcon"}),o.starIcon),fullStarIcon:Ei(Xs({descendantName:"starIcon",modifierName:"full"}),o.fullStarIcon),emptyStarIcon:Ei(Xs({descendantName:"starIcon",modifierName:"empty"}),o.emptyStarIcon),label:Ei(Xs({descendantName:"label"}),o.label),count:Ei(Xs({descendantName:"count"}),o.count)},h=function(e){var s=e.containerNode,o=e.cssClasses,c=e.templates,u=e.renderState;return function(e,t){var n=e.refine,r=e.items,i=e.createURL,a=e.instantSearchInstance;t?u.templateProps=Re({defaultTemplates:Js,templatesConfig:a.templatesConfig,templates:c}):fr(Kn(ha,{createURL:i,cssClasses:o,facetValues:r,templateProps:u.templateProps,toggleRefinement:n},Kn("svg",{style:"display:none;"},Kn("symbol",{id:Xs({descendantName:"starSymbol"}),viewBox:"0 0 24 24"},Gs),Kn("symbol",{id:Xs({descendantName:"starEmptySymbol"}),viewBox:"0 0 24 24"},Zs))),s)}}({containerNode:l,cssClasses:d,renderState:{},templates:u});return W(W({},qr(h,function(){return fr(null,l)})({attribute:r,max:a})),{},{$$widgetType:"ais.ratingMenu"})},refinementList:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.operator,a=t.sortBy,s=t.limit,o=t.showMore,c=t.showMoreLimit,u=t.searchable,l=void 0!==u&&u,d=t.searchablePlaceholder,h=void 0===d?"Search...":d,f=t.searchableEscapeFacetValues,m=void 0===f||f,p=t.searchableIsAlwaysActive,g=void 0===p||p,v=t.cssClasses,y=void 0===v?{}:v,b=t.templates,S=void 0===b?{}:b,R=t.transformItems;if(!n)throw new Error(no("The `container` option is required."));var w=!!l&&Boolean(m),_=ye(n),P={root:Ei(ro(),y.root),noRefinementRoot:Ei(ro({modifierName:"noRefinement"}),y.noRefinementRoot),list:Ei(ro({descendantName:"list"}),y.list),item:Ei(ro({descendantName:"item"}),y.item),selectedItem:Ei(ro({descendantName:"item",modifierName:"selected"}),y.selectedItem),searchBox:Ei(ro({descendantName:"searchBox"}),y.searchBox),label:Ei(ro({descendantName:"label"}),y.label),checkbox:Ei(ro({descendantName:"checkbox"}),y.checkbox),labelText:Ei(ro({descendantName:"labelText"}),y.labelText),count:Ei(ro({descendantName:"count"}),y.count),noResults:Ei(ro({descendantName:"noResults"}),y.noResults),showMore:Ei(ro({descendantName:"showMore"}),y.showMore),disabledShowMore:Ei(ro({descendantName:"showMore",modifierName:"disabled"}),y.disabledShowMore),searchable:{root:Ei(io(),y.searchableRoot),form:Ei(io({descendantName:"form"}),y.searchableForm),input:Ei(io({descendantName:"input"}),y.searchableInput),submit:Ei(io({descendantName:"submit"}),y.searchableSubmit),submitIcon:Ei(io({descendantName:"submitIcon"}),y.searchableSubmitIcon),reset:Ei(io({descendantName:"reset"}),y.searchableReset),resetIcon:Ei(io({descendantName:"resetIcon"}),y.searchableResetIcon),loadingIndicator:Ei(io({descendantName:"loadingIndicator"}),y.searchableLoadingIndicator),loadingIcon:Ei(io({descendantName:"loadingIcon"}),y.searchableLoadingIcon)}},x=function(e){var h=e.containerNode,f=e.cssClasses,m=e.templates,p=e.searchBoxTemplates,g=e.renderState,v=e.showMore,y=e.searchable,b=e.searchablePlaceholder,S=e.searchableIsAlwaysActive;return function(e,t){var n=e.refine,r=e.items,i=e.createURL,a=e.searchForItems,s=e.isFromSearch,o=e.instantSearchInstance,c=e.toggleShowMore,u=e.isShowingMore,l=e.hasExhaustiveItems,d=e.canToggleShowMore;if(t)return g.templateProps=Re({defaultTemplates:to,templatesConfig:o.templatesConfig,templates:m}),void(g.searchBoxTemplateProps=Re({defaultTemplates:eo,templatesConfig:o.templatesConfig,templates:p}));fr(Kn(ha,{createURL:i,cssClasses:f,facetValues:r,templateProps:g.templateProps,searchBoxTemplateProps:g.searchBoxTemplateProps,toggleRefinement:n,searchFacetValues:y?a:void 0,searchPlaceholder:b,searchIsAlwaysActive:S,isFromSearch:s,showMore:v&&!s&&0<r.length,toggleShowMore:c,isShowingMore:u,hasExhaustiveItems:l,canToggleShowMore:d}),h)}}({containerNode:_,cssClasses:P,templates:S,searchBoxTemplates:{submit:S.searchableSubmit,reset:S.searchableReset,loadingIndicator:S.searchableLoadingIndicator},renderState:{},searchable:l,searchablePlaceholder:h,searchableIsAlwaysActive:g,showMore:o});return W(W({},Wr(x,function(){return fr(null,_)})({attribute:r,operator:i,limit:s,showMore:o,showMoreLimit:c,sortBy:a,escapeFacetValues:w,transformItems:R})),{},{$$widgetType:"ais.refinementList"})},relevantSort:function(e){var t=e.container,n=e.templates,r=void 0===n?{}:n,i=e.cssClasses,a=void 0===i?{}:i;if(!t)throw new Error(so("The `container` option is required."));
12479var s=ye(t),o={root:Ei(oo(),a.root),text:Ei(oo({descendantName:"text"}),a.text),button:Ei(oo({descendantName:"button"}),a.button)},c=W(W({},ao),r),u=function(e){var i=e.containerNode,a=e.cssClasses,s=e.templates;return function(e){var t=e.isRelevantSorted,n=e.isVirtualReplica,r=e.refine;fr(Kn(Us,{cssClasses:a,templates:s,isRelevantSorted:t,isVirtualReplica:n,refine:r}),i)}}({containerNode:s,cssClasses:o,renderState:{},templates:c});return W(W({},Pi(u,function(){fr(null,s)})({})),{},{$$widgetType:"ais.relevantSort"})},searchBox:function(e){var t=e||{},n=t.container,r=t.placeholder,i=void 0===r?"":r,a=t.cssClasses,s=void 0===a?{}:a,o=t.autofocus,c=void 0!==o&&o,u=t.searchAsYouType,l=void 0===u||u,d=t.showReset,h=void 0===d||d,f=t.showSubmit,m=void 0===f||f,p=t.showLoadingIndicator,g=void 0===p||p,v=t.queryHook,y=t.templates,b=void 0===y?{}:y;if(!n)throw new Error(co("The `container` option is required."));var S=ye(n),R={root:Ei(uo(),s.root),form:Ei(uo({descendantName:"form"}),s.form),input:Ei(uo({descendantName:"input"}),s.input),submit:Ei(uo({descendantName:"submit"}),s.submit),submitIcon:Ei(uo({descendantName:"submitIcon"}),s.submitIcon),reset:Ei(uo({descendantName:"reset"}),s.reset),resetIcon:Ei(uo({descendantName:"resetIcon"}),s.resetIcon),loadingIndicator:Ei(uo({descendantName:"loadingIndicator"}),s.loadingIndicator),loadingIcon:Ei(uo({descendantName:"loadingIcon"}),s.loadingIcon)},w=W(W({},eo),b),_=function(e){var i=e.containerNode,a=e.cssClasses,s=e.placeholder,o=e.templates,c=e.autofocus,u=e.searchAsYouType,l=e.showReset,d=e.showSubmit,h=e.showLoadingIndicator;return function(e){var t=e.refine,n=e.query,r=e.isSearchStalled;fr(Kn(la,{query:n,placeholder:s,autofocus:c,refine:t,searchAsYouType:u,templates:o,showSubmit:d,showReset:l,showLoadingIndicator:h,isSearchStalled:r,cssClasses:a}),i)}}({containerNode:S,cssClasses:R,placeholder:i,templates:w,autofocus:c,searchAsYouType:l,showReset:h,showSubmit:m,showLoadingIndicator:g});return W(W({},Br(_,function(){return fr(null,S)})({queryHook:v})),{},{$$widgetType:"ais.searchBox"})},sortBy:function(e){var t=e||{},n=t.container,r=t.items,i=t.cssClasses,a=void 0===i?{}:i,s=t.transformItems;if(!n)throw new Error(lo("The `container` option is required."));var o=ye(n),c={root:Ei(ho(),a.root),select:Ei(ho({descendantName:"select"}),a.select),option:Ei(ho({descendantName:"option"}),a.option)},u=function(e){var a=e.containerNode,s=e.cssClasses;return function(e,t){var n=e.currentRefinement,r=e.options,i=e.refine;t||fr(Kn("div",{className:s.root},Kn(Sa,{cssClasses:s,currentValue:n,options:r,setValue:i})),a)}}
vendor: 1,812 bytes, line 12479
12479({containerNode:o,cssClasses:c});return W(W({},Ur(u,function(){return fr(null,o)})({container:o,items:r,transformItems:s})),{},{$$widgetType:"ais.sortBy"})},stats:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.templates,s=void 0===a?{}:a;if(!n)throw new Error(fo("The `container` option is required."));var o=ye(n),c={root:Ei(mo(),i.root),text:Ei(mo({descendantName:"text"}),i.text)},u=function(e){var d=e.renderState,h=e.cssClasses,f=e.containerNode,m=e.templates;return function(e,t){var n=e.hitsPerPage,r=e.nbHits,i=e.nbSortedHits,a=e.areHitsSorted,s=e.nbPages,o=e.page,c=e.processingTimeMS,u=e.query,l=e.instantSearchInstance;t?d.templateProps=Re({defaultTemplates:po,templatesConfig:l.templatesConfig,templates:m}):fr(Kn(qs,{cssClasses:h,hitsPerPage:n,nbHits:r,nbSortedHits:i,areHitsSorted:a,nbPages:s,page:o,processingTimeMS:c,query:u,templateProps:d.templateProps}),f)}}({containerNode:o,cssClasses:c,templates:s,renderState:{}});return W(W({},Qr(u,function(){return fr(null,o)})({})),{},{$$widgetType:"ais.stats"})},toggleRefinement:function(e){var t=e||{},n=t.container,r=t.attribute,i=t.cssClasses,a=void 0===i?{}:i,s=t.templates,o=void 0===s?{}:s,c=t.on,u=void 0===c||c,l=t.off;if(!n)throw new Error(vo("The `container` option is required."));var d=ye(n),h={root:Ei(yo(),a.root),label:Ei(yo({descendantName:"label"}),a.label),checkbox:Ei(yo({descendantName:"checkbox"}),a.checkbox),labelText:Ei(yo({descendantName:"labelText"}),a.labelText)},f=function(e){var a=e.containerNode,s=e.cssClasses,o=e.renderState,c=e.templates;return function(e,t){var n=e.value,r=e.refine,i=e.instantSearchInstance;t?o.templateProps=Re({defaultTemplates:go,templatesConfig:i.templatesConfig,templates:c}):fr(Kn(Qs,{cssClasses:s,currentRefinement:n,templateProps:o.templateProps,refine:r}),a)}}
12479({containerNode:d,cssClasses:h,renderState:{},templates:o});return W(W({},Vr(f,function(){return fr(null,d)})({attribute:r,on:u,off:l})),{},{$$widgetType:"ais.toggleRefinement"})},voiceSearch:function(e){var t=e||{},n=t.container,r=t.cssClasses,i=void 0===r?{}:r,a=t.templates,s=void 0===a?{}:a,o=t.searchAsYouSpeak,c=void 0!==o&&o,u=t.language,l=t.additionalQueryParameters,d=t.createVoiceSearchHelper;if(!n)throw new Error(So("The `container` option is required."));var h=ye(n),f={root:Ei(Ro(),i.root),button:Ei(Ro({descendantName:"button"}),i.button),status:Ei(Ro({descendantName:"status"}),i.status)},m=W(W({},bo),s),p=function(e){var a=e.containerNode,s=e.cssClasses,o=e.templates;return function(e){var t=e.isBrowserSupported,n=e.isListening,r=e.toggleListening,i=e.voiceListeningState;fr(Kn(Vs,{cssClasses:s,templates:o,isBrowserSupported:t,isListening:n,toggleListening:r,voiceListeningState:i}),a)}}({containerNode:h,cssClasses:f,templates:m});return W(W({},Ri(p,function(){return fr(null,h)})({container:h,cssClasses:f,templates:m,searchAsYouSpeak:c,language:u,additionalQueryParameters:l,createVoiceSearchHelper:d})),{},{$$widgetType:"ais.voiceSearch"})}}),Po=Object.freeze({__proto__:null,createInsightsMiddleware:function(e){var t=e||{},d=t.insightsClient,h=t.insightsInitParams,f=t.onEvent;if(null!==d&&!d)throw new Error("The `insightsClient` option is required. To disable, set it to `null`.");var m=Boolean(d),p=null===d?Le:d;return function(e){var n=e.instantSearchInstance,t=D(function(e){if(e.transporter){var t=e.transporter,n=t.headers,r=t.queryParameters,i="x-algolia-application-id",a="x-algolia-api-key";return[n[i]||r[i],n[a]||r[a]]}return[e.applicationID,e.apiKey]}(n.client),2),r=t[0],i=t[1],a=void 0,s=void 0;if(Array.isArray(p.queue)){var o=D(Ie(p.queue.slice().reverse(),function(e){return"setUserToken"===D(e,1)[0]})||[],2);a=o[1]}p("getUserToken",null,function(e,t){s=t}),p("init",W({appId:r,apiKey:i},h));var c,u,l=hi(Le);return{onStateChange:function(){},subscribe:function(){p("addAlgoliaAgent","insights-middleware"),c=l({searchParameters:{clickAnalytics:!0}}),n.addWidgets([c]);function e(e){u&&n.removeWidgets([u]),u=l({searchParameters:{userToken:e}}),n.addWidgets([u])}var t=Ht();m&&t&&e(t),s?p("setUserToken",s):a&&p("setUserToken",a),p("onUserTokenChange",e,{immediate:!0}),n.sendEventToInsights=function(e){if(f)f(e,d);else if(e.insightsMethod){Boolean(n.renderState[n.indexName].configure.widgetParams.searchParameters.userToken)&&p(e.insightsMethod,e.payload)}}},unsubscribe:function(){p("onUserTokenChange",void 0),n.removeWidgets([c,u]),u=c=void 0,n.sendEventToInsights=Le}}}},createRouterMiddleware:pn,isMetadataEnabled:gn,createMetadataMiddleware:vn}),xo=Object.freeze({__proto__:null,history:mn});function No(e){e.configure;return j(e,["configure"])}var Io=Object.freeze({__proto__:null,simple:Dt,singleIndex:function(t){return{stateToRoute:function(e){return No(e[t]||{})},routeToState:function(e){return k({},t,No(0<arguments.length&&void 0!==e?e:{}))}}}});function Fo(e){var t=e||{};t.page;return j(t,["page"])}var To="ais.infiniteHits";function Co(e){return new Rn(e)}return Co.version="4.43.0",Co.connectors=Ti,Co.widgets=_o,Co.middlewares=Po,Co.routers=xo,Co.stateMappings=Io,Co.createInfiniteHitsSessionStorageCache=function(){return{read:function(e){var t=e.state,n=St(function(e){return e.window.sessionStorage});if(!n)return null;try{var r=JSON.parse(n.getItem(To));return r&&De(r.state,Fo(t))?r.hits:null}catch(e){if(e instanceof SyntaxError)try{n.removeItem(To)}catch(e){}return null}},write:function(e){var t=e.state,n=e.hits,r=St(function(e){return e.window.sessionStorage});if(r)try{r.setItem(To,JSON.stringify({state:Fo(t),hits:n}))}catch(e){}}}},Co.highlight=Ct,Co.reverseHighlight=kt,Co.snippet=jt,Co.reverseSnippet=Ot,Co.insights=At,Co});
12480
12481
12482// サイドバーの追従
12483//ある見出し(h3, h4)が画面の一番上を超えたら → その見出しがtextになっているaタグをハイライトする
12484$(function(){
12485  let contentsArr = new Array();
12486  let chapters = $("#subCol .chapters li a");
12487  let headerHeight = $("#header").outerHeight(true);
12488  $("#mainCol").find("h3, h4").each(function(index) {
12489    let targetContents = $(this).attr('id');
12490    let targetContentsTop = $(this).offset().top - $(this).outerHeight(true) - headerHeight;
12491    let targetA = chapters[index - 1];
12492    contentsArr.push([targetContentsTop, targetA]);
12493  });
12494  $(window).scroll(function(){
12495    let windowScrolltop = $(window).scrollTop();
12496    $.each(contentsArr, function(index, value) {
12497      if(value[0] >= windowScrolltop && index > 0) {
12498        if(contentsArr[index - 1][0] <= windowScrolltop){
12499          $(chapters).removeClass("chapters-focus");
12500          $(value[1]).addClass("chapters-focus");
12501          return false;
12502        }
12503      };
12504    });
12505  });
12506});
12507//レスポンシブ対応のため、横幅を定義
12508const mediaQuery = window.matchMedia("(min-width: 920px)");
12509hundle(mediaQuery);
12510mediaQuery.addListener(hundle);
12511// サイドバーの追従
12512function hundle(mq) {
12513  var pathName = location.pathname;
12514  if (pathName == '/' || pathName == '/ebook' || pathName == '/my' || pathName == '/users/payment_method/edit' || pathName == '/users/payment_method/new'){
12515    $("#subCol").css('position', '');
12516  } else if (mq.matches) {
12517    $("#subCol").css('position', 'fixed');
12518    sidebarFollow();
12519  } else {
12520    $("#subCol").css('position', '');
12521  };
12522
12523  function sidebarFollow() {
12524    window.onload = function () {
12525      var response = $.ajax({
12526        type: "GET",
12527        url: "/pro_plan_available",
12528        headers: {
12529          'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
12530        },
12531        async: false
12532      }).responseText;
12533      var isProPlanAvaible = JSON.parse(response).available;
12534      var target = $("#subCol");
12535      var footer = $("footer");
12536      var header = $("#header");
12537      var chapters = $("#subCol .chapters");
12538      if (target.children('.ebook').length > 0) { return; }
12539      if (!target.length) { return; }
12540      if (!footer.length) { return; }
12541      var targetHeight = target.outerHeight(true);
12542      var headerHeight = header.outerHeight(true) + 10;
12543      var targetTop = target.offset().top - headerHeight;
12544      var scrollTargetHeight = isProPlanAvaible ? 'calc(100% - 85px - 1em)' : "calc(" + $(window).height() + "px - 190px + 4em)";
12545      var chapterFitHeight = chapters.scrollHeight > chapters.height() ? "calc(" + $(window).height() + "px - 570px - 1em)" : 'auto';
12546      var scrollChaptersHeight = isProPlanAvaible ? 'auto' : chapterFitHeight;
12547      target.css({ position: "fixed", top: (headerHeight + 39) + "px", right: "calc((100vw - (640px + 26em))/2)", display: "grid", gridTemplateRows: "auto auto auto 1fr", height: scrollTargetHeight });
12548      chapters.css({ position: "static", height: scrollChaptersHeight, marginBottom: "1em" });
12549
12550      $(window).scroll(function () {
12551        var scrollTop = $(this).scrollTop();
12552        targetHeight = target.outerHeight(true);
12553        if (scrollTop > targetTop && mq.matches) {
12554          var footerTop = footer.offset().top;
12555          if (scrollTop + targetHeight + headerHeight > footerTop) {
12556            customTopPosition = footerTop - (scrollTop + targetHeight);
12557            target.css({ position: "fixed", top: customTopPosition + "px" });
12558          } else {
12559            target.css({ position: "fixed", top: headerHeight + "px", right: "calc((100vw - (640px + 26em))/2)", display: "grid", gridTemplateRows: "auto auto auto 1fr", height: scrollTargetHeight });
12560            chapters.css({ position: "static", height: scrollChaptersHeight, marginBottom: "1em" });
12561          }
12562        };
12563      });
12564    };
12565  };
12566};
12567$(function () {
12568  var sponsor = 'RailsGuidesJP';
12569  var imageName = '';
12570  var requestSponsor = getRequestSponsor();
12571
12572  function notifyError(payload) {
12573    $.ajax({
12574      type: 'POST',
12575      url: '/sponsor_banner_error',
12576      headers: {
12577        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
12578      },
12579      contentType: 'application/json',
12580      data: JSON.stringify(payload)
12581    });
12582  }
12583
12584  function handleError(jqXHR, textStatus, errorThrown) {
12585    notifyError({
12586      status: jqXHR?.status || 'invalid_response',
12587      error: errorThrown || textStatus || 'unknown error',
12588      path: location.href,
12589      sponsor: sponsor
12590    });
12591  }
12592
12593  // MEMO: sponsor パラメータ指定のない通常表示だけを表示イベントとして計測する
12594  function shouldTrackSponsorView() {
12595    return !requestSponsor && typeof dataLayer !== 'undefined';
12596  }
12597
12598  // MEMO: トップページの協賛部分の切り替えを行う
12599  if($('#top-sponsor').length) {
12600    $.ajax({
12601      type: 'GET',
12602      url: '/sponsor_banner_top',
12603      data: { sponsor: requestSponsor },
12604      headers: {
12605        'X-CSRF-Token' : $('meta[name="csrf-token"]').attr('content')
12606      }
12607    }).done(function(data){
12608      if(data.sponsor && data.sponsor.top) {
12609        sponsor_data = data['sponsor']['top']
12610        $('#top-sponsor').html('<a href=' + sponsor_data['link'] + ' target="_blank" rel="noopener"><img src=' + sponsor_data['image'] + ' alt=' + sponsor_data['name'] + ' class="bnr-proplan" /></a>');
12611        sponsor = data['sponsor']['name']
12612        imageName = sponsor_data['image_name']
12613        
12614        if(shouldTrackSponsorView()) {
12615          dataLayer.push({
12616            event: 'top-sponsor',
12617            sponsorName: sponsor,
12618            sponsorImage: imageName
12619          });
12620        }
12621
12622        $('#top-sponsor').on('click', function() {
12623          if(typeof dataLayer !== 'undefined') {
12624            dataLayer.push({
12625              event: 'top-sponsor-click',
12626              sponsorName: sponsor,
12627              sponsorImage: imageName
12628            });
12629          }
12630        });
12631      } else {
12632        // 空データはfailとして扱う
12633        handleError({ status: 204 }, 'empty_data', 'top sponsor data is empty');
12634      }
12635    })
12636    .fail(handleError);
12637  }
12638
12639  // MEMO: 各ページのトップに協賛のバナーを表示するサンプルコード
12640  // if(!(location.pathname =='/' || location.pathname == 'index.html') && $('#mainCol').length && !$('#guidesLogout').length) {
12641  //   $('#mainCol').prepend('<a href="https://engineer-recruit.coincheck.com/" target="_blank" rel="noopener"><img src="/images/bnr-top-sample.png" alt="GuideSample" class="bnr-proplan" /></a>');
12642  // }
12643
12644  // MEMO: サイドバーの協賛部分の切り替えを行う
12645  if($('#sponsor').length) {
12646    $.ajax({
12647      type: 'GET',
12648      url: '/sponsor_banner_sidebar',
12649      data: { sponsor: requestSponsor },
12650      headers: {
12651        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
12652      }
12653    }).done(function(data){
12654      if(data.sponsor && data.sponsor.sidebar) {
12655        sponsor_data = data['sponsor']['sidebar']
12656        $('#sponsor').html('<a href=' + sponsor_data['link'] + ' target="_blank" rel="noopener"><img src=' + sponsor_data['image'] + ' alt=' + sponsor_data['name'] + ' class="bnr-proplan" /></a>');
12657        sponsor = data['sponsor']['name']
12658        imageName = sponsor_data['image_name']
12659
12660        if(shouldTrackSponsorView()) {
12661          dataLayer.push({
12662            event: 'sponsor',
12663            sponsorName: sponsor,
12664            sponsorImage: imageName
12665          });
12666        }
12667
12668        $('#sponsor').on('click', function() {
12669          if(typeof dataLayer !== 'undefined') {
12670            dataLayer.push({
12671              event: 'sponsor-sidebar',
12672              sponsorName: sponsor,
12673              sponsorImage: imageName
12674            });
12675          }
12676        });
12677      } else {
12678        // 空データはfailとして扱う
12679        handleError({ status: 204 }, 'empty_data', 'sidebar sponsor data is empty');
12680      }
12681    })
12682    .fail(handleError);
12683  }
12684
12685  // フッターにある協賛をランダムで表示する
12686  if($('#footer-bnrs').length) {
12687    $.ajax({
12688      type: 'GET',
12689      url: '/sponsor_footer',
12690      headers: {
12691        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
12692      }
12693    }).done(function(data){
12694      $('#footer-bnrs').html(data['footer'])
12695
12696      $('.bnr-item').on('click', function() {
12697        if(typeof dataLayer !== 'undefined' && !!this.id) {
12698          dataLayer.push({
12699            event: 'sponsor-footer',
12700            sponsorName: this.id
12701          });
12702        }
12703      });
12704      $('.bnr-item-text a').on('click', function() {
12705        if(typeof dataLayer !== 'undefined' && !!this.href) {
12706          dataLayer.push({
12707            event: 'sponsor-footer',
12708            sponsorName: this.parentElement.parentElement.id,
12709            sponsorClickedLink: this.href
12710          });
12711        }
12712      });
12713    })
12714  }
12715});
12716
12717function getRequestSponsor() {
12718  let params = new URLSearchParams(document.location.search.substring(1));
12719  return params.get("sponsor");
12720};
12721$(function () {
12722  $(document).mousedown(function(event) {
12723    if(!$(event.target).closest('#deleteAdsMessage').length && $('#deleteAdsMessage').css('display') == 'block') {
12724      $('#deleteAdsMessage').css('display','none');
12725      $('#deleteAds').html('<i class="fas fa-times"></i>');
12726    }
12727  });
12728  let deletebutton = '<span id="deleteAds"><i class="fas fa-times"></i></span>';
12729  let proplan = '<div id="deleteAdsMessage">Proプランではバナー非表示や<br>全文検索などに対応しています<a href="/pro" class="deleteAdsMessageButton" target="_blank">15日間トライアル</a></div>';
12730  $('#toppage').append(proplan);
12731  $('#toppage').prepend(
12732    $(deletebutton).click(function(){
12733      $('#deleteAdsMessage').css('display','block');
12734      $('#deleteAds').html('<i class="fas fa-minus"></i>');
12735    })
12736  );
12737});
12738$(function() {
12739    var appear = false;
12740    var pagetop = $('#page_top');
12741    $(window).scroll(function () {
12742      if ($(this).scrollTop() > 100) {  //100pxスクロールしたら
12743        if (appear == false) {
12744          appear = true;
12745          pagetop.stop().animate({
12746            'bottom': '60px' //下から30pxの位置に
12747          }, 300); //0.3秒かけて現れる
12748        }
12749      } else {
12750        if (appear) {
12751          appear = false;
12752          pagetop.stop().animate({
12753            'bottom': '-50px' //下から-50pxの位置に
12754          }, 300); //0.3秒かけて隠れる
12755        }
12756      }
12757    });
12758    pagetop.click(function () {
12759      $('body, html').animate({ scrollTop: 0 }, 500); //0.5秒かけてトップへ戻る
12760      return false;
12761    });
12762  });
12763$(function () {
12764  if($(".work-in-progress").length){
12765    let firstWip = $(".work-in-progress").first()
12766    let wip = $(".work-in-progress").not(firstWip)
12767    wip.css('display', 'block')
12768    wip.before('<div class="work-in-progress-tooltip tooltip" data-tooltip="このアイコンが付いているガイドは現在作業中 (WIP: Work In Progress) です。作業中のガイドはそれなりに有用ではありますが、不完全な情報やエラーが含まれている可能性があります。"></div>');
12769  }
12770});
12771/*!
12772 * jQuery JavaScript Library v3.7.0
12773 * https://jquery.com/
12774 *
12775 * Copyright OpenJS Foundation and other contributors
12776 * Released under the MIT license
12777 * https://jquery.org/license
12778 *
12779 * Date: 2023-05-11T18:29Z
12780 */
12781( function( global, factory ) {
12782
12783	"use strict";
12784
12785	if ( typeof module === "object" && typeof module.exports === "object" ) {
12786
12787		// For CommonJS and CommonJS-like environments where a proper `window`
12788		// is present, execute the factory and get jQuery.
12789		// For environments that do not have a `window` with a `document`
12790		// (such as Node.js), expose a factory as module.exports.
12791		// This accentuates the need for the creation of a real `window`.
12792		// e.g. var jQuery = require("jquery")(window);
12793		// See ticket trac-14549 for more info.
12794		module.exports = global.document ?
12795			factory( global, true ) :
12796			function( w ) {
12797				if ( !w.document ) {
12798					throw new Error( "jQuery requires a window with a document" );
12799				}
12800				return factory( w );
12801			};
12802	} else {
12803		factory( global );
12804	}
12805
12806// Pass this if window is not defined yet
12807} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
12808
12809// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
12810// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
12811// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), str
vendor: 9,010 bytes, lines 12811-13186
12811ict mode should be common
12812// enough that all such attempts are guarded in a try block.
12813"use strict";
12814
12815var arr = [];
12816
12817var getProto = Object.getPrototypeOf;
12818
12819var slice = arr.slice;
12820
12821var flat = arr.flat ? function( array ) {
12822	return arr.flat.call( array );
12823} : function( array ) {
12824	return arr.concat.apply( [], array );
12825};
12826
12827
12828var push = arr.push;
12829
12830var indexOf = arr.indexOf;
12831
12832var class2type = {};
12833
12834var toString = class2type.toString;
12835
12836var hasOwn = class2type.hasOwnProperty;
12837
12838var fnToString = hasOwn.toString;
12839
12840var ObjectFunctionString = fnToString.call( Object );
12841
12842var support = {};
12843
12844var isFunction = function isFunction( obj ) {
12845
12846		// Support: Chrome <=57, Firefox <=52
12847		// In some browsers, typeof returns "function" for HTML <object> elements
12848		// (i.e., `typeof document.createElement( "object" ) === "function"`).
12849		// We don't want to classify *any* DOM node as a function.
12850		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
12851		// Plus for old WebKit, typeof returns "function" for HTML collections
12852		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
12853		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
12854			typeof obj.item !== "function";
12855	};
12856
12857
12858var isWindow = function isWindow( obj ) {
12859		return obj != null && obj === obj.window;
12860	};
12861
12862
12863var document = window.document;
12864
12865
12866
12867	var preservedScriptAttributes = {
12868		type: true,
12869		src: true,
12870		nonce: true,
12871		noModule: true
12872	};
12873
12874	function DOMEval( code, node, doc ) {
12875		doc = doc || document;
12876
12877		var i, val,
12878			script = doc.createElement( "script" );
12879
12880		script.text = code;
12881		if ( node ) {
12882			for ( i in preservedScriptAttributes ) {
12883
12884				// Support: Firefox 64+, Edge 18+
12885				// Some browsers don't support the "nonce" property on scripts.
12886				// On the other hand, just using `getAttribute` is not enough as
12887				// the `nonce` attribute is reset to an empty string whenever it
12888				// becomes browsing-context connected.
12889				// See https://github.com/whatwg/html/issues/2369
12890				// See https://html.spec.whatwg.org/#nonce-attributes
12891				// The `node.getAttribute` check was added for the sake of
12892				// `jQuery.globalEval` so that it can fake a nonce-containing node
12893				// via an object.
12894				val = node[ i ] || node.getAttribute && node.getAttribute( i );
12895				if ( val ) {
12896					script.setAttribute( i, val );
12897				}
12898			}
12899		}
12900		doc.head.appendChild( script ).parentNode.removeChild( script );
12901	}
12902
12903
12904function toType( obj ) {
12905	if ( obj == null ) {
12906		return obj + "";
12907	}
12908
12909	// Support: Android <=2.3 only (functionish RegExp)
12910	return typeof obj === "object" || typeof obj === "function" ?
12911		class2type[ toString.call( obj ) ] || "object" :
12912		typeof obj;
12913}
12914/* global Symbol */
12915// Defining this global in .eslintrc.json would create a danger of using the global
12916// unguarded in another place, it seems safer to define global only for this module
12917
12918
12919
12920var version = "3.7.0",
12921
12922	rhtmlSuffix = /HTML$/i,
12923
12924	// Define a local copy of jQuery
12925	jQuery = function( selector, context ) {
12926
12927		// The jQuery object is actually just the init constructor 'enhanced'
12928		// Need init if jQuery is called (just allow error to be thrown if not included)
12929		return new jQuery.fn.init( selector, context );
12930	};
12931
12932jQuery.fn = jQuery.prototype = {
12933
12934	// The current version of jQuery being used
12935	jquery: version,
12936
12937	constructor: jQuery,
12938
12939	// The default length of a jQuery object is 0
12940	length: 0,
12941
12942	toArray: function() {
12943		return slice.call( this );
12944	},
12945
12946	// Get the Nth element in the matched element set OR
12947	// Get the whole matched element set as a clean array
12948	get: function( num ) {
12949
12950		// Return all the elements in a clean array
12951		if ( num == null ) {
12952			return slice.call( this );
12953		}
12954
12955		// Return just the one element from the set
12956		return num < 0 ? this[ num + this.length ] : this[ num ];
12957	},
12958
12959	// Take an array of elements and push it onto the stack
12960	// (returning the new matched element set)
12961	pushStack: function( elems ) {
12962
12963		// Build a new jQuery matched element set
12964		var ret = jQuery.merge( this.constructor(), elems );
12965
12966		// Add the old object onto the stack (as a reference)
12967		ret.prevObject = this;
12968
12969		// Return the newly-formed element set
12970		return ret;
12971	},
12972
12973	// Execute a callback for every element in the matched set.
12974	each: function( callback ) {
12975		return jQuery.each( this, callback );
12976	},
12977
12978	map: function( callback ) {
12979		return this.pushStack( jQuery.map( this, function( elem, i ) {
12980			return callback.call( elem, i, elem );
12981		} ) );
12982	},
12983
12984	slice: function() {
12985		return this.pushStack( slice.apply( this, arguments ) );
12986	},
12987
12988	first: function() {
12989		return this.eq( 0 );
12990	},
12991
12992	last: function() {
12993		return this.eq( -1 );
12994	},
12995
12996	even: function() {
12997		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
12998			return ( i + 1 ) % 2;
12999		} ) );
13000	},
13001
13002	odd: function() {
13003		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
13004			return i % 2;
13005		} ) );
13006	},
13007
13008	eq: function( i ) {
13009		var len = this.length,
13010			j = +i + ( i < 0 ? len : 0 );
13011		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
13012	},
13013
13014	end: function() {
13015		return this.prevObject || this.constructor();
13016	},
13017
13018	// For internal use only.
13019	// Behaves like an Array's method, not like a jQuery method.
13020	push: push,
13021	sort: arr.sort,
13022	splice: arr.splice
13023};
13024
13025jQuery.extend = jQuery.fn.extend = function() {
13026	var options, name, src, copy, copyIsArray, clone,
13027		target = arguments[ 0 ] || {},
13028		i = 1,
13029		length = arguments.length,
13030		deep = false;
13031
13032	// Handle a deep copy situation
13033	if ( typeof target === "boolean" ) {
13034		deep = target;
13035
13036		// Skip the boolean and the target
13037		target = arguments[ i ] || {};
13038		i++;
13039	}
13040
13041	// Handle case when target is a string or something (possible in deep copy)
13042	if ( typeof target !== "object" && !isFunction( target ) ) {
13043		target = {};
13044	}
13045
13046	// Extend jQuery itself if only one argument is passed
13047	if ( i === length ) {
13048		target = this;
13049		i--;
13050	}
13051
13052	for ( ; i < length; i++ ) {
13053
13054		// Only deal with non-null/undefined values
13055		if ( ( options = arguments[ i ] ) != null ) {
13056
13057			// Extend the base object
13058			for ( name in options ) {
13059				copy = options[ name ];
13060
13061				// Prevent Object.prototype pollution
13062				// Prevent never-ending loop
13063				if ( name === "__proto__" || target === copy ) {
13064					continue;
13065				}
13066
13067				// Recurse if we're merging plain objects or arrays
13068				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
13069					( copyIsArray = Array.isArray( copy ) ) ) ) {
13070					src = target[ name ];
13071
13072					// Ensure proper type for the source value
13073					if ( copyIsArray && !Array.isArray( src ) ) {
13074						clone = [];
13075					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
13076						clone = {};
13077					} else {
13078						clone = src;
13079					}
13080					copyIsArray = false;
13081
13082					// Never move original objects, clone them
13083					target[ name ] = jQuery.extend( deep, clone, copy );
13084
13085				// Don't bring in undefined values
13086				} else if ( copy !== undefined ) {
13087					target[ name ] = copy;
13088				}
13089			}
13090		}
13091	}
13092
13093	// Return the modified object
13094	return target;
13095};
13096
13097jQuery.extend( {
13098
13099	// Unique for each copy of jQuery on the page
13100	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
13101
13102	// Assume jQuery is ready without the ready module
13103	isReady: true,
13104
13105	error: function( msg ) {
13106		throw new Error( msg );
13107	},
13108
13109	noop: function() {},
13110
13111	isPlainObject: function( obj ) {
13112		var proto, Ctor;
13113
13114		// Detect obvious negatives
13115		// Use toString instead of jQuery.type to catch host objects
13116		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
13117			return false;
13118		}
13119
13120		proto = getProto( obj );
13121
13122		// Objects with no prototype (e.g., `Object.create( null )`) are plain
13123		if ( !proto ) {
13124			return true;
13125		}
13126
13127		// Objects with prototype are plain iff they were constructed by a global Object function
13128		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
13129		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
13130	},
13131
13132	isEmptyObject: function( obj ) {
13133		var name;
13134
13135		for ( name in obj ) {
13136			return false;
13137		}
13138		return true;
13139	},
13140
13141	// Evaluates a script in a provided context; falls back to the global one
13142	// if not specified.
13143	globalEval: function( code, options, doc ) {
13144		DOMEval( code, { nonce: options && options.nonce }, doc );
13145	},
13146
13147	each: function( obj, callback ) {
13148		var length, i = 0;
13149
13150		if ( isArrayLike( obj ) ) {
13151			length = obj.length;
13152			for ( ; i < length; i++ ) {
13153				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
13154					break;
13155				}
13156			}
13157		} else {
13158			for ( i in obj ) {
13159				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
13160					break;
13161				}
13162			}
13163		}
13164
13165		return obj;
13166	},
13167
13168
13169	// Retrieve the text value of an array of DOM nodes
13170	text: function( elem ) {
13171		var node,
13172			ret = "",
13173			i = 0,
13174			nodeType = elem.nodeType;
13175
13176		if ( !nodeType ) {
13177
13178			// If no nodeType, this is expected to be an array
13179			while ( ( node = elem[ i++ ] ) ) {
13180
13181				// Do not traverse comment nodes
13182				ret += jQuery.text( node );
13183			}
13184		} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
13185			return elem.textContent;
13186		} else 
vendor: 19,662 bytes, lines 13186-13899
13186if ( nodeType === 3 || nodeType === 4 ) {
13187			return elem.nodeValue;
13188		}
13189
13190		// Do not include comment or processing instruction nodes
13191
13192		return ret;
13193	},
13194
13195	// results is for internal usage only
13196	makeArray: function( arr, results ) {
13197		var ret = results || [];
13198
13199		if ( arr != null ) {
13200			if ( isArrayLike( Object( arr ) ) ) {
13201				jQuery.merge( ret,
13202					typeof arr === "string" ?
13203						[ arr ] : arr
13204				);
13205			} else {
13206				push.call( ret, arr );
13207			}
13208		}
13209
13210		return ret;
13211	},
13212
13213	inArray: function( elem, arr, i ) {
13214		return arr == null ? -1 : indexOf.call( arr, elem, i );
13215	},
13216
13217	isXMLDoc: function( elem ) {
13218		var namespace = elem && elem.namespaceURI,
13219			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
13220
13221		// Assume HTML when documentElement doesn't yet exist, such as inside
13222		// document fragments.
13223		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
13224	},
13225
13226	// Support: Android <=4.0 only, PhantomJS 1 only
13227	// push.apply(_, arraylike) throws on ancient WebKit
13228	merge: function( first, second ) {
13229		var len = +second.length,
13230			j = 0,
13231			i = first.length;
13232
13233		for ( ; j < len; j++ ) {
13234			first[ i++ ] = second[ j ];
13235		}
13236
13237		first.length = i;
13238
13239		return first;
13240	},
13241
13242	grep: function( elems, callback, invert ) {
13243		var callbackInverse,
13244			matches = [],
13245			i = 0,
13246			length = elems.length,
13247			callbackExpect = !invert;
13248
13249		// Go through the array, only saving the items
13250		// that pass the validator function
13251		for ( ; i < length; i++ ) {
13252			callbackInverse = !callback( elems[ i ], i );
13253			if ( callbackInverse !== callbackExpect ) {
13254				matches.push( elems[ i ] );
13255			}
13256		}
13257
13258		return matches;
13259	},
13260
13261	// arg is for internal usage only
13262	map: function( elems, callback, arg ) {
13263		var length, value,
13264			i = 0,
13265			ret = [];
13266
13267		// Go through the array, translating each of the items to their new values
13268		if ( isArrayLike( elems ) ) {
13269			length = elems.length;
13270			for ( ; i < length; i++ ) {
13271				value = callback( elems[ i ], i, arg );
13272
13273				if ( value != null ) {
13274					ret.push( value );
13275				}
13276			}
13277
13278		// Go through every key on the object,
13279		} else {
13280			for ( i in elems ) {
13281				value = callback( elems[ i ], i, arg );
13282
13283				if ( value != null ) {
13284					ret.push( value );
13285				}
13286			}
13287		}
13288
13289		// Flatten any nested arrays
13290		return flat( ret );
13291	},
13292
13293	// A global GUID counter for objects
13294	guid: 1,
13295
13296	// jQuery.support is not used in Core but other projects attach their
13297	// properties to it so it needs to exist.
13298	support: support
13299} );
13300
13301if ( typeof Symbol === "function" ) {
13302	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
13303}
13304
13305// Populate the class2type map
13306jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
13307	function( _i, name ) {
13308		class2type[ "[object " + name + "]" ] = name.toLowerCase();
13309	} );
13310
13311function isArrayLike( obj ) {
13312
13313	// Support: real iOS 8.2 only (not reproducible in simulator)
13314	// `in` check used to prevent JIT error (gh-2145)
13315	// hasOwn isn't used here due to false negatives
13316	// regarding Nodelist length in IE
13317	var length = !!obj && "length" in obj && obj.length,
13318		type = toType( obj );
13319
13320	if ( isFunction( obj ) || isWindow( obj ) ) {
13321		return false;
13322	}
13323
13324	return type === "array" || length === 0 ||
13325		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
13326}
13327
13328
13329function nodeName( elem, name ) {
13330
13331	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
13332
13333}
13334var pop = arr.pop;
13335
13336
13337var sort = arr.sort;
13338
13339
13340var splice = arr.splice;
13341
13342
13343var whitespace = "[\\x20\\t\\r\\n\\f]";
13344
13345
13346var rtrimCSS = new RegExp(
13347	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
13348	"g"
13349);
13350
13351
13352
13353
13354// Note: an element does not contain itself
13355jQuery.contains = function( a, b ) {
13356	var bup = b && b.parentNode;
13357
13358	return a === bup || !!( bup && bup.nodeType === 1 && (
13359
13360		// Support: IE 9 - 11+
13361		// IE doesn't have `contains` on SVG.
13362		a.contains ?
13363			a.contains( bup ) :
13364			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
13365	) );
13366};
13367
13368
13369
13370
13371// CSS string/identifier serialization
13372// https://drafts.csswg.org/cssom/#common-serializing-idioms
13373var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
13374
13375function fcssescape( ch, asCodePoint ) {
13376	if ( asCodePoint ) {
13377
13378		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
13379		if ( ch === "\0" ) {
13380			return "\uFFFD";
13381		}
13382
13383		// Control characters and (dependent upon position) numbers get escaped as code points
13384		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
13385	}
13386
13387	// Other potentially-special ASCII characters get backslash-escaped
13388	return "\\" + ch;
13389}
13390
13391jQuery.escapeSelector = function( sel ) {
13392	return ( sel + "" ).replace( rcssescape, fcssescape );
13393};
13394
13395
13396
13397
13398var preferredDoc = document,
13399	pushNative = push;
13400
13401( function() {
13402
13403var i,
13404	Expr,
13405	outermostContext,
13406	sortInput,
13407	hasDuplicate,
13408	push = pushNative,
13409
13410	// Local document vars
13411	document,
13412	documentElement,
13413	documentIsHTML,
13414	rbuggyQSA,
13415	matches,
13416
13417	// Instance-specific data
13418	expando = jQuery.expando,
13419	dirruns = 0,
13420	done = 0,
13421	classCache = createCache(),
13422	tokenCache = createCache(),
13423	compilerCache = createCache(),
13424	nonnativeSelectorCache = createCache(),
13425	sortOrder = function( a, b ) {
13426		if ( a === b ) {
13427			hasDuplicate = true;
13428		}
13429		return 0;
13430	},
13431
13432	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
13433		"loop|multiple|open|readonly|required|scoped",
13434
13435	// Regular expressions
13436
13437	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
13438	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
13439		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
13440
13441	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
13442	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
13443
13444		// Operator (capture 2)
13445		"*([*^$|!~]?=)" + whitespace +
13446
13447		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
13448		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
13449		whitespace + "*\\]",
13450
13451	pseudos = ":(" + identifier + ")(?:\\((" +
13452
13453		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
13454		// 1. quoted (capture 3; capture 4 or capture 5)
13455		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
13456
13457		// 2. simple (capture 6)
13458		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
13459
13460		// 3. anything else (capture 2)
13461		".*" +
13462		")\\)|)",
13463
13464	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
13465	rwhitespace = new RegExp( whitespace + "+", "g" ),
13466
13467	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
13468	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
13469		whitespace + "*" ),
13470	rdescend = new RegExp( whitespace + "|>" ),
13471
13472	rpseudo = new RegExp( pseudos ),
13473	ridentifier = new RegExp( "^" + identifier + "$" ),
13474
13475	matchExpr = {
13476		ID: new RegExp( "^#(" + identifier + ")" ),
13477		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
13478		TAG: new RegExp( "^(" + identifier + "|[*])" ),
13479		ATTR: new RegExp( "^" + attributes ),
13480		PSEUDO: new RegExp( "^" + pseudos ),
13481		CHILD: new RegExp(
13482			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
13483				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
13484				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
13485		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
13486
13487		// For use in libraries implementing .is()
13488		// We use this for POS matching in `select`
13489		needsContext: new RegExp( "^" + whitespace +
13490			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
13491			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
13492	},
13493
13494	rinputs = /^(?:input|select|textarea|button)$/i,
13495	rheader = /^h\d$/i,
13496
13497	// Easily-parseable/retrievable ID or TAG or CLASS selectors
13498	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
13499
13500	rsibling = /[+~]/,
13501
13502	// CSS escapes
13503	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
13504	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
13505		"?|\\\\([^\\r\\n\\f])", "g" ),
13506	funescape = function( escape, nonHex ) {
13507		var high = "0x" + escape.slice( 1 ) - 0x10000;
13508
13509		if ( nonHex ) {
13510
13511			// Strip the backslash prefix from a non-hex escape sequence
13512			return nonHex;
13513		}
13514
13515		// Replace a hexadecimal escape sequence with the encoded Unicode code point
13516		// Support: IE <=11+
13517		// For values outside the Basic Multilingual Plane (BMP), manually construct a
13518		// surrogate pair
13519		return high < 0 ?
13520			String.fromCharCode( high + 0x10000 ) :
13521			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
13522	},
13523
13524	// Used for iframes; see `setDocument`.
13525	// Support: IE 9 - 11+, Edge 12 - 18+
13526	// Removing the function wrapper causes a "Permission Denied"
13527	// error in IE/Edge.
13528	unloadHandler = function() {
13529		setDocument();
13530	},
13531
13532	inDisabledFieldset = addCombinator(
13533		function( elem ) {
13534			return elem.disabled === true && nodeName( elem, "fieldset" );
13535		},
13536		{ dir: "parentNode", next: "legend" }
13537	);
13538
13539// Support: IE <=9 only
13540// Accessing document.activeElement can throw unexpectedly
13541// https://bugs.jquery.com/ticket/13393
13542function safeActiveElement() {
13543	try {
13544		return document.activeElement;
13545	} catch ( err ) { }
13546}
13547
13548// Optimize for push.apply( _, NodeList )
13549try {
13550	push.apply(
13551		( arr = slice.call( preferredDoc.childNodes ) ),
13552		preferredDoc.childNodes
13553	);
13554
13555	// Support: Android <=4.0
13556	// Detect silently failing push.apply
13557	// eslint-disable-next-line no-unused-expressions
13558	arr[ preferredDoc.childNodes.length ].nodeType;
13559} catch ( e ) {
13560	push = {
13561		apply: function( target, els ) {
13562			pushNative.apply( target, slice.call( els ) );
13563		},
13564		call: function( target ) {
13565			pushNative.apply( target, slice.call( arguments, 1 ) );
13566		}
13567	};
13568}
13569
13570function find( selector, context, results, seed ) {
13571	var m, i, elem, nid, match, groups, newSelector,
13572		newContext = context && context.ownerDocument,
13573
13574		// nodeType defaults to 9, since context defaults to document
13575		nodeType = context ? context.nodeType : 9;
13576
13577	results = results || [];
13578
13579	// Return early from calls with invalid selector or context
13580	if ( typeof selector !== "string" || !selector ||
13581		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
13582
13583		return results;
13584	}
13585
13586	// Try to shortcut find operations (as opposed to filters) in HTML documents
13587	if ( !seed ) {
13588		setDocument( context );
13589		context = context || document;
13590
13591		if ( documentIsHTML ) {
13592
13593			// If the selector is sufficiently simple, try using a "get*By*" DOM method
13594			// (excepting DocumentFragment context, where the methods don't exist)
13595			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
13596
13597				// ID selector
13598				if ( ( m = match[ 1 ] ) ) {
13599
13600					// Document context
13601					if ( nodeType === 9 ) {
13602						if ( ( elem = context.getElementById( m ) ) ) {
13603
13604							// Support: IE 9 only
13605							// getElementById can match elements by name instead of ID
13606							if ( elem.id === m ) {
13607								push.call( results, elem );
13608								return results;
13609							}
13610						} else {
13611							return results;
13612						}
13613
13614					// Element context
13615					} else {
13616
13617						// Support: IE 9 only
13618						// getElementById can match elements by name instead of ID
13619						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
13620							find.contains( context, elem ) &&
13621							elem.id === m ) {
13622
13623							push.call( results, elem );
13624							return results;
13625						}
13626					}
13627
13628				// Type selector
13629				} else if ( match[ 2 ] ) {
13630					push.apply( results, context.getElementsByTagName( selector ) );
13631					return results;
13632
13633				// Class selector
13634				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
13635					push.apply( results, context.getElementsByClassName( m ) );
13636					return results;
13637				}
13638			}
13639
13640			// Take advantage of querySelectorAll
13641			if ( !nonnativeSelectorCache[ selector + " " ] &&
13642				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
13643
13644				newSelector = selector;
13645				newContext = context;
13646
13647				// qSA considers elements outside a scoping root when evaluating child or
13648				// descendant combinators, which is not what we want.
13649				// In such cases, we work around the behavior by prefixing every selector in the
13650				// list with an ID selector referencing the scope context.
13651				// The technique has to be used as well when a leading combinator is used
13652				// as such selectors are not recognized by querySelectorAll.
13653				// Thanks to Andrew Dupont for this technique.
13654				if ( nodeType === 1 &&
13655					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
13656
13657					// Expand context for sibling selectors
13658					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
13659						context;
13660
13661					// We can use :scope instead of the ID hack if the browser
13662					// supports it & if we're not changing the context.
13663					// Support: IE 11+, Edge 17 - 18+
13664					// IE/Edge sometimes throw a "Permission denied" error when
13665					// strict-comparing two documents; shallow comparisons work.
13666					// eslint-disable-next-line eqeqeq
13667					if ( newContext != context || !support.scope ) {
13668
13669						// Capture the context ID, setting it first if necessary
13670						if ( ( nid = context.getAttribute( "id" ) ) ) {
13671							nid = jQuery.escapeSelector( nid );
13672						} else {
13673							context.setAttribute( "id", ( nid = expando ) );
13674						}
13675					}
13676
13677					// Prefix every selector in the list
13678					groups = tokenize( selector );
13679					i = groups.length;
13680					while ( i-- ) {
13681						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
13682							toSelector( groups[ i ] );
13683					}
13684					newSelector = groups.join( "," );
13685				}
13686
13687				try {
13688					push.apply( results,
13689						newContext.querySelectorAll( newSelector )
13690					);
13691					return results;
13692				} catch ( qsaError ) {
13693					nonnativeSelectorCache( selector, true );
13694				} finally {
13695					if ( nid === expando ) {
13696						context.removeAttribute( "id" );
13697					}
13698				}
13699			}
13700		}
13701	}
13702
13703	// All others
13704	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
13705}
13706
13707/**
13708 * Create key-value caches of limited size
13709 * @returns {function(string, object)} Returns the Object data after storing it on itself with
13710 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
13711 *	deleting the oldest entry
13712 */
13713function createCache() {
13714	var keys = [];
13715
13716	function cache( key, value ) {
13717
13718		// Use (key + " ") to avoid collision with native prototype properties
13719		// (see https://github.com/jquery/sizzle/issues/157)
13720		if ( keys.push( key + " " ) > Expr.cacheLength ) {
13721
13722			// Only keep the most recent entries
13723			delete cache[ keys.shift() ];
13724		}
13725		return ( cache[ key + " " ] = value );
13726	}
13727	return cache;
13728}
13729
13730/**
13731 * Mark a function for special use by jQuery selector module
13732 * @param {Function} fn The function to mark
13733 */
13734function markFunction( fn ) {
13735	fn[ expando ] = true;
13736	return fn;
13737}
13738
13739/**
13740 * Support testing using an element
13741 * @param {Function} fn Passed the created element and returns a boolean result
13742 */
13743function assert( fn ) {
13744	var el = document.createElement( "fieldset" );
13745
13746	try {
13747		return !!fn( el );
13748	} catch ( e ) {
13749		return false;
13750	} finally {
13751
13752		// Remove from its parent by default
13753		if ( el.parentNode ) {
13754			el.parentNode.removeChild( el );
13755		}
13756
13757		// release memory in IE
13758		el = null;
13759	}
13760}
13761
13762/**
13763 * Returns a function to use in pseudos for input types
13764 * @param {String} type
13765 */
13766function createInputPseudo( type ) {
13767	return function( elem ) {
13768		return nodeName( elem, "input" ) && elem.type === type;
13769	};
13770}
13771
13772/**
13773 * Returns a function to use in pseudos for buttons
13774 * @param {String} type
13775 */
13776function createButtonPseudo( type ) {
13777	return function( elem ) {
13778		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
13779			elem.type === type;
13780	};
13781}
13782
13783/**
13784 * Returns a function to use in pseudos for :enabled/:disabled
13785 * @param {Boolean} disabled true for :disabled; false for :enabled
13786 */
13787function createDisabledPseudo( disabled ) {
13788
13789	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
13790	return function( elem ) {
13791
13792		// Only certain elements can match :enabled or :disabled
13793		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
13794		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
13795		if ( "form" in elem ) {
13796
13797			// Check for inherited disabledness on relevant non-disabled elements:
13798			// * listed form-associated elements in a disabled fieldset
13799			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
13800			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
13801			// * option elements in a disabled optgroup
13802			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
13803			// All such elements have a "form" property.
13804			if ( elem.parentNode && elem.disabled === false ) {
13805
13806				// Option elements defer to a parent optgroup if present
13807				if ( "label" in elem ) {
13808					if ( "label" in elem.parentNode ) {
13809						return elem.parentNode.disabled === disabled;
13810					} else {
13811						return elem.disabled === disabled;
13812					}
13813				}
13814
13815				// Support: IE 6 - 11+
13816				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
13817				return elem.isDisabled === disabled ||
13818
13819					// Where there is no isDisabled, check manually
13820					elem.isDisabled !== !disabled &&
13821						inDisabledFieldset( elem ) === disabled;
13822			}
13823
13824			return elem.disabled === disabled;
13825
13826		// Try to winnow out elements that can't be disabled before trusting the disabled property.
13827		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
13828		// even exist on them, let alone have a boolean value.
13829		} else if ( "label" in elem ) {
13830			return elem.disabled === disabled;
13831		}
13832
13833		// Remaining elements are neither :enabled nor :disabled
13834		return false;
13835	};
13836}
13837
13838/**
13839 * Returns a function to use in pseudos for positionals
13840 * @param {Function} fn
13841 */
13842function createPositionalPseudo( fn ) {
13843	return markFunction( function( argument ) {
13844		argument = +argument;
13845		return markFunction( function( seed, matches ) {
13846			var j,
13847				matchIndexes = fn( [], seed.length, argument ),
13848				i = matchIndexes.length;
13849
13850			// Match elements found at the specified indexes
13851			while ( i-- ) {
13852				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
13853					seed[ j ] = !( matches[ j ] = seed[ j ] );
13854				}
13855			}
13856		} );
13857	} );
13858}
13859
13860/**
13861 * Checks a node for validity as a jQuery selector context
13862 * @param {Element|Object=} context
13863 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
13864 */
13865function testContext( context ) {
13866	return context && typeof context.getElementsByTagName !== "undefined" && context;
13867}
13868
13869/**
13870 * Sets document-related variables once based on the current document
13871 * @param {Element|Object} [node] An element or document object to use to set the document
13872 * @returns {Object} Returns the current document
13873 */
13874function setDocument( node ) {
13875	var subWindow,
13876		doc = node ? node.ownerDocument || node : preferredDoc;
13877
13878	// Return early if doc is invalid or already selected
13879	// Support: IE 11+, Edge 17 - 18+
13880	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
13881	// two documents; shallow comparisons work.
13882	// eslint-disable-next-line eqeqeq
13883	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
13884		return document;
13885	}
13886
13887	// Update global variables
13888	document = doc;
13889	documentElement = document.documentElement;
13890	documentIsHTML = !jQuery.isXMLDoc( document );
13891
13892	// Support: iOS 7 only, IE 9 - 11+
13893	// Older browsers didn't support unprefixed `matches`.
13894	matches = documentElement.matches ||
13895		documentElement.webkitMatchesSelector ||
13896		documentElement.msMatchesSelector;
13897
13898	// Support: IE 9 - 11+, Edge 12 - 18+
13899	// Accessing iframe documents after unload throws "permission denied" errors
13899 (see trac-13936)
13900	// Support: IE 11+, Edge 17 - 18+
13901	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
13902	// two documents; shallow comparisons work.
13903	// eslint-disable-next-line eqeqeq
13904	if ( 
vendor: 44,049 bytes, lines 13904-15467
13904preferredDoc != document &&
13905		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
13906
13907		// Support: IE 9 - 11+, Edge 12 - 18+
13908		subWindow.addEventListener( "unload", unloadHandler );
13909	}
13910
13911	// Support: IE <10
13912	// Check if getElementById returns elements by name
13913	// The broken getElementById methods don't pick up programmatically-set names,
13914	// so use a roundabout getElementsByName test
13915	support.getById = assert( function( el ) {
13916		documentElement.appendChild( el ).id = jQuery.expando;
13917		return !document.getElementsByName ||
13918			!document.getElementsByName( jQuery.expando ).length;
13919	} );
13920
13921	// Support: IE 9 only
13922	// Check to see if it's possible to do matchesSelector
13923	// on a disconnected node.
13924	support.disconnectedMatch = assert( function( el ) {
13925		return matches.call( el, "*" );
13926	} );
13927
13928	// Support: IE 9 - 11+, Edge 12 - 18+
13929	// IE/Edge don't support the :scope pseudo-class.
13930	support.scope = assert( function() {
13931		return document.querySelectorAll( ":scope" );
13932	} );
13933
13934	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
13935	// Make sure the `:has()` argument is parsed unforgivingly.
13936	// We include `*` in the test to detect buggy implementations that are
13937	// _selectively_ forgiving (specifically when the list includes at least
13938	// one valid selector).
13939	// Note that we treat complete lack of support for `:has()` as if it were
13940	// spec-compliant support, which is fine because use of `:has()` in such
13941	// environments will fail in the qSA path and fall back to jQuery traversal
13942	// anyway.
13943	support.cssHas = assert( function() {
13944		try {
13945			document.querySelector( ":has(*,:jqfake)" );
13946			return false;
13947		} catch ( e ) {
13948			return true;
13949		}
13950	} );
13951
13952	// ID filter and find
13953	if ( support.getById ) {
13954		Expr.filter.ID = function( id ) {
13955			var attrId = id.replace( runescape, funescape );
13956			return function( elem ) {
13957				return elem.getAttribute( "id" ) === attrId;
13958			};
13959		};
13960		Expr.find.ID = function( id, context ) {
13961			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
13962				var elem = context.getElementById( id );
13963				return elem ? [ elem ] : [];
13964			}
13965		};
13966	} else {
13967		Expr.filter.ID =  function( id ) {
13968			var attrId = id.replace( runescape, funescape );
13969			return function( elem ) {
13970				var node = typeof elem.getAttributeNode !== "undefined" &&
13971					elem.getAttributeNode( "id" );
13972				return node && node.value === attrId;
13973			};
13974		};
13975
13976		// Support: IE 6 - 7 only
13977		// getElementById is not reliable as a find shortcut
13978		Expr.find.ID = function( id, context ) {
13979			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
13980				var node, i, elems,
13981					elem = context.getElementById( id );
13982
13983				if ( elem ) {
13984
13985					// Verify the id attribute
13986					node = elem.getAttributeNode( "id" );
13987					if ( node && node.value === id ) {
13988						return [ elem ];
13989					}
13990
13991					// Fall back on getElementsByName
13992					elems = context.getElementsByName( id );
13993					i = 0;
13994					while ( ( elem = elems[ i++ ] ) ) {
13995						node = elem.getAttributeNode( "id" );
13996						if ( node && node.value === id ) {
13997							return [ elem ];
13998						}
13999					}
14000				}
14001
14002				return [];
14003			}
14004		};
14005	}
14006
14007	// Tag
14008	Expr.find.TAG = function( tag, context ) {
14009		if ( typeof context.getElementsByTagName !== "undefined" ) {
14010			return context.getElementsByTagName( tag );
14011
14012		// DocumentFragment nodes don't have gEBTN
14013		} else {
14014			return context.querySelectorAll( tag );
14015		}
14016	};
14017
14018	// Class
14019	Expr.find.CLASS = function( className, context ) {
14020		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
14021			return context.getElementsByClassName( className );
14022		}
14023	};
14024
14025	/* QSA/matchesSelector
14026	---------------------------------------------------------------------- */
14027
14028	// QSA and matchesSelector support
14029
14030	rbuggyQSA = [];
14031
14032	// Build QSA regex
14033	// Regex strategy adopted from Diego Perini
14034	assert( function( el ) {
14035
14036		var input;
14037
14038		documentElement.appendChild( el ).innerHTML =
14039			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
14040			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
14041			"<option selected=''></option></select>";
14042
14043		// Support: iOS <=7 - 8 only
14044		// Boolean attributes and "value" are not treated correctly in some XML documents
14045		if ( !el.querySelectorAll( "[selected]" ).length ) {
14046			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
14047		}
14048
14049		// Support: iOS <=7 - 8 only
14050		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
14051			rbuggyQSA.push( "~=" );
14052		}
14053
14054		// Support: iOS 8 only
14055		// https://bugs.webkit.org/show_bug.cgi?id=136851
14056		// In-page `selector#id sibling-combinator selector` fails
14057		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
14058			rbuggyQSA.push( ".#.+[+~]" );
14059		}
14060
14061		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
14062		// In some of the document kinds, these selectors wouldn't work natively.
14063		// This is probably OK but for backwards compatibility we want to maintain
14064		// handling them through jQuery traversal in jQuery 3.x.
14065		if ( !el.querySelectorAll( ":checked" ).length ) {
14066			rbuggyQSA.push( ":checked" );
14067		}
14068
14069		// Support: Windows 8 Native Apps
14070		// The type and name attributes are restricted during .innerHTML assignment
14071		input = document.createElement( "input" );
14072		input.setAttribute( "type", "hidden" );
14073		el.appendChild( input ).setAttribute( "name", "D" );
14074
14075		// Support: IE 9 - 11+
14076		// IE's :disabled selector does not pick up the children of disabled fieldsets
14077		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
14078		// In some of the document kinds, these selectors wouldn't work natively.
14079		// This is probably OK but for backwards compatibility we want to maintain
14080		// handling them through jQuery traversal in jQuery 3.x.
14081		documentElement.appendChild( el ).disabled = true;
14082		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
14083			rbuggyQSA.push( ":enabled", ":disabled" );
14084		}
14085
14086		// Support: IE 11+, Edge 15 - 18+
14087		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
14088		// Adding a temporary attribute to the document before the selection works
14089		// around the issue.
14090		// Interestingly, IE 10 & older don't seem to have the issue.
14091		input = document.createElement( "input" );
14092		input.setAttribute( "name", "" );
14093		el.appendChild( input );
14094		if ( !el.querySelectorAll( "[name='']" ).length ) {
14095			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
14096				whitespace + "*(?:''|\"\")" );
14097		}
14098	} );
14099
14100	if ( !support.cssHas ) {
14101
14102		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
14103		// Our regular `try-catch` mechanism fails to detect natively-unsupported
14104		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
14105		// in browsers that parse the `:has()` argument as a forgiving selector list.
14106		// https://drafts.csswg.org/selectors/#relational now requires the argument
14107		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
14108		rbuggyQSA.push( ":has" );
14109	}
14110
14111	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
14112
14113	/* Sorting
14114	---------------------------------------------------------------------- */
14115
14116	// Document order sorting
14117	sortOrder = function( a, b ) {
14118
14119		// Flag for duplicate removal
14120		if ( a === b ) {
14121			hasDuplicate = true;
14122			return 0;
14123		}
14124
14125		// Sort on method existence if only one input has compareDocumentPosition
14126		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
14127		if ( compare ) {
14128			return compare;
14129		}
14130
14131		// Calculate position if both inputs belong to the same document
14132		// Support: IE 11+, Edge 17 - 18+
14133		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
14134		// two documents; shallow comparisons work.
14135		// eslint-disable-next-line eqeqeq
14136		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
14137			a.compareDocumentPosition( b ) :
14138
14139			// Otherwise we know they are disconnected
14140			1;
14141
14142		// Disconnected nodes
14143		if ( compare & 1 ||
14144			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
14145
14146			// Choose the first element that is related to our preferred document
14147			// Support: IE 11+, Edge 17 - 18+
14148			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
14149			// two documents; shallow comparisons work.
14150			// eslint-disable-next-line eqeqeq
14151			if ( a === document || a.ownerDocument == preferredDoc &&
14152				find.contains( preferredDoc, a ) ) {
14153				return -1;
14154			}
14155
14156			// Support: IE 11+, Edge 17 - 18+
14157			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
14158			// two documents; shallow comparisons work.
14159			// eslint-disable-next-line eqeqeq
14160			if ( b === document || b.ownerDocument == preferredDoc &&
14161				find.contains( preferredDoc, b ) ) {
14162				return 1;
14163			}
14164
14165			// Maintain original order
14166			return sortInput ?
14167				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
14168				0;
14169		}
14170
14171		return compare & 4 ? -1 : 1;
14172	};
14173
14174	return document;
14175}
14176
14177find.matches = function( expr, elements ) {
14178	return find( expr, null, null, elements );
14179};
14180
14181find.matchesSelector = function( elem, expr ) {
14182	setDocument( elem );
14183
14184	if ( documentIsHTML &&
14185		!nonnativeSelectorCache[ expr + " " ] &&
14186		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
14187
14188		try {
14189			var ret = matches.call( elem, expr );
14190
14191			// IE 9's matchesSelector returns false on disconnected nodes
14192			if ( ret || support.disconnectedMatch ||
14193
14194					// As well, disconnected nodes are said to be in a document
14195					// fragment in IE 9
14196					elem.document && elem.document.nodeType !== 11 ) {
14197				return ret;
14198			}
14199		} catch ( e ) {
14200			nonnativeSelectorCache( expr, true );
14201		}
14202	}
14203
14204	return find( expr, document, null, [ elem ] ).length > 0;
14205};
14206
14207find.contains = function( context, elem ) {
14208
14209	// Set document vars if needed
14210	// Support: IE 11+, Edge 17 - 18+
14211	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
14212	// two documents; shallow comparisons work.
14213	// eslint-disable-next-line eqeqeq
14214	if ( ( context.ownerDocument || context ) != document ) {
14215		setDocument( context );
14216	}
14217	return jQuery.contains( context, elem );
14218};
14219
14220
14221find.attr = function( elem, name ) {
14222
14223	// Set document vars if needed
14224	// Support: IE 11+, Edge 17 - 18+
14225	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
14226	// two documents; shallow comparisons work.
14227	// eslint-disable-next-line eqeqeq
14228	if ( ( elem.ownerDocument || elem ) != document ) {
14229		setDocument( elem );
14230	}
14231
14232	var fn = Expr.attrHandle[ name.toLowerCase() ],
14233
14234		// Don't get fooled by Object.prototype properties (see trac-13807)
14235		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
14236			fn( elem, name, !documentIsHTML ) :
14237			undefined;
14238
14239	if ( val !== undefined ) {
14240		return val;
14241	}
14242
14243	return elem.getAttribute( name );
14244};
14245
14246find.error = function( msg ) {
14247	throw new Error( "Syntax error, unrecognized expression: " + msg );
14248};
14249
14250/**
14251 * Document sorting and removing duplicates
14252 * @param {ArrayLike} results
14253 */
14254jQuery.uniqueSort = function( results ) {
14255	var elem,
14256		duplicates = [],
14257		j = 0,
14258		i = 0;
14259
14260	// Unless we *know* we can detect duplicates, assume their presence
14261	//
14262	// Support: Android <=4.0+
14263	// Testing for detecting duplicates is unpredictable so instead assume we can't
14264	// depend on duplicate detection in all browsers without a stable sort.
14265	hasDuplicate = !support.sortStable;
14266	sortInput = !support.sortStable && slice.call( results, 0 );
14267	sort.call( results, sortOrder );
14268
14269	if ( hasDuplicate ) {
14270		while ( ( elem = results[ i++ ] ) ) {
14271			if ( elem === results[ i ] ) {
14272				j = duplicates.push( i );
14273			}
14274		}
14275		while ( j-- ) {
14276			splice.call( results, duplicates[ j ], 1 );
14277		}
14278	}
14279
14280	// Clear input after sorting to release objects
14281	// See https://github.com/jquery/sizzle/pull/225
14282	sortInput = null;
14283
14284	return results;
14285};
14286
14287jQuery.fn.uniqueSort = function() {
14288	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
14289};
14290
14291Expr = jQuery.expr = {
14292
14293	// Can be adjusted by the user
14294	cacheLength: 50,
14295
14296	createPseudo: markFunction,
14297
14298	match: matchExpr,
14299
14300	attrHandle: {},
14301
14302	find: {},
14303
14304	relative: {
14305		">": { dir: "parentNode", first: true },
14306		" ": { dir: "parentNode" },
14307		"+": { dir: "previousSibling", first: true },
14308		"~": { dir: "previousSibling" }
14309	},
14310
14311	preFilter: {
14312		ATTR: function( match ) {
14313			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
14314
14315			// Move the given value to match[3] whether quoted or unquoted
14316			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
14317				.replace( runescape, funescape );
14318
14319			if ( match[ 2 ] === "~=" ) {
14320				match[ 3 ] = " " + match[ 3 ] + " ";
14321			}
14322
14323			return match.slice( 0, 4 );
14324		},
14325
14326		CHILD: function( match ) {
14327
14328			/* matches from matchExpr["CHILD"]
14329				1 type (only|nth|...)
14330				2 what (child|of-type)
14331				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
14332				4 xn-component of xn+y argument ([+-]?\d*n|)
14333				5 sign of xn-component
14334				6 x of xn-component
14335				7 sign of y-component
14336				8 y of y-component
14337			*/
14338			match[ 1 ] = match[ 1 ].toLowerCase();
14339
14340			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
14341
14342				// nth-* requires argument
14343				if ( !match[ 3 ] ) {
14344					find.error( match[ 0 ] );
14345				}
14346
14347				// numeric x and y parameters for Expr.filter.CHILD
14348				// remember that false/true cast respectively to 0/1
14349				match[ 4 ] = +( match[ 4 ] ?
14350					match[ 5 ] + ( match[ 6 ] || 1 ) :
14351					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
14352				);
14353				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
14354
14355			// other types prohibit arguments
14356			} else if ( match[ 3 ] ) {
14357				find.error( match[ 0 ] );
14358			}
14359
14360			return match;
14361		},
14362
14363		PSEUDO: function( match ) {
14364			var excess,
14365				unquoted = !match[ 6 ] && match[ 2 ];
14366
14367			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
14368				return null;
14369			}
14370
14371			// Accept quoted arguments as-is
14372			if ( match[ 3 ] ) {
14373				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
14374
14375			// Strip excess characters from unquoted arguments
14376			} else if ( unquoted && rpseudo.test( unquoted ) &&
14377
14378				// Get excess from tokenize (recursively)
14379				( excess = tokenize( unquoted, true ) ) &&
14380
14381				// advance to the next closing parenthesis
14382				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
14383
14384				// excess is a negative index
14385				match[ 0 ] = match[ 0 ].slice( 0, excess );
14386				match[ 2 ] = unquoted.slice( 0, excess );
14387			}
14388
14389			// Return only captures needed by the pseudo filter method (type and argument)
14390			return match.slice( 0, 3 );
14391		}
14392	},
14393
14394	filter: {
14395
14396		TAG: function( nodeNameSelector ) {
14397			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
14398			return nodeNameSelector === "*" ?
14399				function() {
14400					return true;
14401				} :
14402				function( elem ) {
14403					return nodeName( elem, expectedNodeName );
14404				};
14405		},
14406
14407		CLASS: function( className ) {
14408			var pattern = classCache[ className + " " ];
14409
14410			return pattern ||
14411				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
14412					"(" + whitespace + "|$)" ) ) &&
14413				classCache( className, function( elem ) {
14414					return pattern.test(
14415						typeof elem.className === "string" && elem.className ||
14416							typeof elem.getAttribute !== "undefined" &&
14417								elem.getAttribute( "class" ) ||
14418							""
14419					);
14420				} );
14421		},
14422
14423		ATTR: function( name, operator, check ) {
14424			return function( elem ) {
14425				var result = find.attr( elem, name );
14426
14427				if ( result == null ) {
14428					return operator === "!=";
14429				}
14430				if ( !operator ) {
14431					return true;
14432				}
14433
14434				result += "";
14435
14436				if ( operator === "=" ) {
14437					return result === check;
14438				}
14439				if ( operator === "!=" ) {
14440					return result !== check;
14441				}
14442				if ( operator === "^=" ) {
14443					return check && result.indexOf( check ) === 0;
14444				}
14445				if ( operator === "*=" ) {
14446					return check && result.indexOf( check ) > -1;
14447				}
14448				if ( operator === "$=" ) {
14449					return check && result.slice( -check.length ) === check;
14450				}
14451				if ( operator === "~=" ) {
14452					return ( " " + result.replace( rwhitespace, " " ) + " " )
14453						.indexOf( check ) > -1;
14454				}
14455				if ( operator === "|=" ) {
14456					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
14457				}
14458
14459				return false;
14460			};
14461		},
14462
14463		CHILD: function( type, what, _argument, first, last ) {
14464			var simple = type.slice( 0, 3 ) !== "nth",
14465				forward = type.slice( -4 ) !== "last",
14466				ofType = what === "of-type";
14467
14468			return first === 1 && last === 0 ?
14469
14470				// Shortcut for :nth-*(n)
14471				function( elem ) {
14472					return !!elem.parentNode;
14473				} :
14474
14475				function( elem, _context, xml ) {
14476					var cache, outerCache, node, nodeIndex, start,
14477						dir = simple !== forward ? "nextSibling" : "previousSibling",
14478						parent = elem.parentNode,
14479						name = ofType && elem.nodeName.toLowerCase(),
14480						useCache = !xml && !ofType,
14481						diff = false;
14482
14483					if ( parent ) {
14484
14485						// :(first|last|only)-(child|of-type)
14486						if ( simple ) {
14487							while ( dir ) {
14488								node = elem;
14489								while ( ( node = node[ dir ] ) ) {
14490									if ( ofType ?
14491										nodeName( node, name ) :
14492										node.nodeType === 1 ) {
14493
14494										return false;
14495									}
14496								}
14497
14498								// Reverse direction for :only-* (if we haven't yet done so)
14499								start = dir = type === "only" && !start && "nextSibling";
14500							}
14501							return true;
14502						}
14503
14504						start = [ forward ? parent.firstChild : parent.lastChild ];
14505
14506						// non-xml :nth-child(...) stores cache data on `parent`
14507						if ( forward && useCache ) {
14508
14509							// Seek `elem` from a previously-cached index
14510							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
14511							cache = outerCache[ type ] || [];
14512							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
14513							diff = nodeIndex && cache[ 2 ];
14514							node = nodeIndex && parent.childNodes[ nodeIndex ];
14515
14516							while ( ( node = ++nodeIndex && node && node[ dir ] ||
14517
14518								// Fallback to seeking `elem` from the start
14519								( diff = nodeIndex = 0 ) || start.pop() ) ) {
14520
14521								// When found, cache indexes on `parent` and break
14522								if ( node.nodeType === 1 && ++diff && node === elem ) {
14523									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
14524									break;
14525								}
14526							}
14527
14528						} else {
14529
14530							// Use previously-cached element index if available
14531							if ( useCache ) {
14532								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
14533								cache = outerCache[ type ] || [];
14534								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
14535								diff = nodeIndex;
14536							}
14537
14538							// xml :nth-child(...)
14539							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
14540							if ( diff === false ) {
14541
14542								// Use the same loop as above to seek `elem` from the start
14543								while ( ( node = ++nodeIndex && node && node[ dir ] ||
14544									( diff = nodeIndex = 0 ) || start.pop() ) ) {
14545
14546									if ( ( ofType ?
14547										nodeName( node, name ) :
14548										node.nodeType === 1 ) &&
14549										++diff ) {
14550
14551										// Cache the index of each encountered element
14552										if ( useCache ) {
14553											outerCache = node[ expando ] ||
14554												( node[ expando ] = {} );
14555											outerCache[ type ] = [ dirruns, diff ];
14556										}
14557
14558										if ( node === elem ) {
14559											break;
14560										}
14561									}
14562								}
14563							}
14564						}
14565
14566						// Incorporate the offset, then check against cycle size
14567						diff -= last;
14568						return diff === first || ( diff % first === 0 && diff / first >= 0 );
14569					}
14570				};
14571		},
14572
14573		PSEUDO: function( pseudo, argument ) {
14574
14575			// pseudo-class names are case-insensitive
14576			// https://www.w3.org/TR/selectors/#pseudo-classes
14577			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
14578			// Remember that setFilters inherits from pseudos
14579			var args,
14580				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
14581					find.error( "unsupported pseudo: " + pseudo );
14582
14583			// The user may use createPseudo to indicate that
14584			// arguments are needed to create the filter function
14585			// just as jQuery does
14586			if ( fn[ expando ] ) {
14587				return fn( argument );
14588			}
14589
14590			// But maintain support for old signatures
14591			if ( fn.length > 1 ) {
14592				args = [ pseudo, pseudo, "", argument ];
14593				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
14594					markFunction( function( seed, matches ) {
14595						var idx,
14596							matched = fn( seed, argument ),
14597							i = matched.length;
14598						while ( i-- ) {
14599							idx = indexOf.call( seed, matched[ i ] );
14600							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
14601						}
14602					} ) :
14603					function( elem ) {
14604						return fn( elem, 0, args );
14605					};
14606			}
14607
14608			return fn;
14609		}
14610	},
14611
14612	pseudos: {
14613
14614		// Potentially complex pseudos
14615		not: markFunction( function( selector ) {
14616
14617			// Trim the selector passed to compile
14618			// to avoid treating leading and trailing
14619			// spaces as combinators
14620			var input = [],
14621				results = [],
14622				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
14623
14624			return matcher[ expando ] ?
14625				markFunction( function( seed, matches, _context, xml ) {
14626					var elem,
14627						unmatched = matcher( seed, null, xml, [] ),
14628						i = seed.length;
14629
14630					// Match elements unmatched by `matcher`
14631					while ( i-- ) {
14632						if ( ( elem = unmatched[ i ] ) ) {
14633							seed[ i ] = !( matches[ i ] = elem );
14634						}
14635					}
14636				} ) :
14637				function( elem, _context, xml ) {
14638					input[ 0 ] = elem;
14639					matcher( input, null, xml, results );
14640
14641					// Don't keep the element
14642					// (see https://github.com/jquery/sizzle/issues/299)
14643					input[ 0 ] = null;
14644					return !results.pop();
14645				};
14646		} ),
14647
14648		has: markFunction( function( selector ) {
14649			return function( elem ) {
14650				return find( selector, elem ).length > 0;
14651			};
14652		} ),
14653
14654		contains: markFunction( function( text ) {
14655			text = text.replace( runescape, funescape );
14656			return function( elem ) {
14657				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
14658			};
14659		} ),
14660
14661		// "Whether an element is represented by a :lang() selector
14662		// is based solely on the element's language value
14663		// being equal to the identifier C,
14664		// or beginning with the identifier C immediately followed by "-".
14665		// The matching of C against the element's language value is performed case-insensitively.
14666		// The identifier C does not have to be a valid language name."
14667		// https://www.w3.org/TR/selectors/#lang-pseudo
14668		lang: markFunction( function( lang ) {
14669
14670			// lang value must be a valid identifier
14671			if ( !ridentifier.test( lang || "" ) ) {
14672				find.error( "unsupported lang: " + lang );
14673			}
14674			lang = lang.replace( runescape, funescape ).toLowerCase();
14675			return function( elem ) {
14676				var elemLang;
14677				do {
14678					if ( ( elemLang = documentIsHTML ?
14679						elem.lang :
14680						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
14681
14682						elemLang = elemLang.toLowerCase();
14683						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
14684					}
14685				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
14686				return false;
14687			};
14688		} ),
14689
14690		// Miscellaneous
14691		target: function( elem ) {
14692			var hash = window.location && window.location.hash;
14693			return hash && hash.slice( 1 ) === elem.id;
14694		},
14695
14696		root: function( elem ) {
14697			return elem === documentElement;
14698		},
14699
14700		focus: function( elem ) {
14701			return elem === safeActiveElement() &&
14702				document.hasFocus() &&
14703				!!( elem.type || elem.href || ~elem.tabIndex );
14704		},
14705
14706		// Boolean properties
14707		enabled: createDisabledPseudo( false ),
14708		disabled: createDisabledPseudo( true ),
14709
14710		checked: function( elem ) {
14711
14712			// In CSS3, :checked should return both checked and selected elements
14713			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
14714			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
14715				( nodeName( elem, "option" ) && !!elem.selected );
14716		},
14717
14718		selected: function( elem ) {
14719
14720			// Support: IE <=11+
14721			// Accessing the selectedIndex property
14722			// forces the browser to treat the default option as
14723			// selected when in an optgroup.
14724			if ( elem.parentNode ) {
14725				// eslint-disable-next-line no-unused-expressions
14726				elem.parentNode.selectedIndex;
14727			}
14728
14729			return elem.selected === true;
14730		},
14731
14732		// Contents
14733		empty: function( elem ) {
14734
14735			// https://www.w3.org/TR/selectors/#empty-pseudo
14736			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
14737			//   but not by others (comment: 8; processing instruction: 7; etc.)
14738			// nodeType < 6 works because attributes (2) do not appear as children
14739			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
14740				if ( elem.nodeType < 6 ) {
14741					return false;
14742				}
14743			}
14744			return true;
14745		},
14746
14747		parent: function( elem ) {
14748			return !Expr.pseudos.empty( elem );
14749		},
14750
14751		// Element/input types
14752		header: function( elem ) {
14753			return rheader.test( elem.nodeName );
14754		},
14755
14756		input: function( elem ) {
14757			return rinputs.test( elem.nodeName );
14758		},
14759
14760		button: function( elem ) {
14761			return nodeName( elem, "input" ) && elem.type === "button" ||
14762				nodeName( elem, "button" );
14763		},
14764
14765		text: function( elem ) {
14766			var attr;
14767			return nodeName( elem, "input" ) && elem.type === "text" &&
14768
14769				// Support: IE <10 only
14770				// New HTML5 attribute values (e.g., "search") appear
14771				// with elem.type === "text"
14772				( ( attr = elem.getAttribute( "type" ) ) == null ||
14773					attr.toLowerCase() === "text" );
14774		},
14775
14776		// Position-in-collection
14777		first: createPositionalPseudo( function() {
14778			return [ 0 ];
14779		} ),
14780
14781		last: createPositionalPseudo( function( _matchIndexes, length ) {
14782			return [ length - 1 ];
14783		} ),
14784
14785		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
14786			return [ argument < 0 ? argument + length : argument ];
14787		} ),
14788
14789		even: createPositionalPseudo( function( matchIndexes, length ) {
14790			var i = 0;
14791			for ( ; i < length; i += 2 ) {
14792				matchIndexes.push( i );
14793			}
14794			return matchIndexes;
14795		} ),
14796
14797		odd: createPositionalPseudo( function( matchIndexes, length ) {
14798			var i = 1;
14799			for ( ; i < length; i += 2 ) {
14800				matchIndexes.push( i );
14801			}
14802			return matchIndexes;
14803		} ),
14804
14805		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
14806			var i;
14807
14808			if ( argument < 0 ) {
14809				i = argument + length;
14810			} else if ( argument > length ) {
14811				i = length;
14812			} else {
14813				i = argument;
14814			}
14815
14816			for ( ; --i >= 0; ) {
14817				matchIndexes.push( i );
14818			}
14819			return matchIndexes;
14820		} ),
14821
14822		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
14823			var i = argument < 0 ? argument + length : argument;
14824			for ( ; ++i < length; ) {
14825				matchIndexes.push( i );
14826			}
14827			return matchIndexes;
14828		} )
14829	}
14830};
14831
14832Expr.pseudos.nth = Expr.pseudos.eq;
14833
14834// Add button/input type pseudos
14835for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
14836	Expr.pseudos[ i ] = createInputPseudo( i );
14837}
14838for ( i in { submit: true, reset: true } ) {
14839	Expr.pseudos[ i ] = createButtonPseudo( i );
14840}
14841
14842// Easy API for creating new setFilters
14843function setFilters() {}
14844setFilters.prototype = Expr.filters = Expr.pseudos;
14845Expr.setFilters = new setFilters();
14846
14847function tokenize( selector, parseOnly ) {
14848	var matched, match, tokens, type,
14849		soFar, groups, preFilters,
14850		cached = tokenCache[ selector + " " ];
14851
14852	if ( cached ) {
14853		return parseOnly ? 0 : cached.slice( 0 );
14854	}
14855
14856	soFar = selector;
14857	groups = [];
14858	preFilters = Expr.preFilter;
14859
14860	while ( soFar ) {
14861
14862		// Comma and first run
14863		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
14864			if ( match ) {
14865
14866				// Don't consume trailing commas as valid
14867				soFar = soFar.slice( match[ 0 ].length ) || soFar;
14868			}
14869			groups.push( ( tokens = [] ) );
14870		}
14871
14872		matched = false;
14873
14874		// Combinators
14875		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
14876			matched = match.shift();
14877			tokens.push( {
14878				value: matched,
14879
14880				// Cast descendant combinators to space
14881				type: match[ 0 ].replace( rtrimCSS, " " )
14882			} );
14883			soFar = soFar.slice( matched.length );
14884		}
14885
14886		// Filters
14887		for ( type in Expr.filter ) {
14888			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
14889				( match = preFilters[ type ]( match ) ) ) ) {
14890				matched = match.shift();
14891				tokens.push( {
14892					value: matched,
14893					type: type,
14894					matches: match
14895				} );
14896				soFar = soFar.slice( matched.length );
14897			}
14898		}
14899
14900		if ( !matched ) {
14901			break;
14902		}
14903	}
14904
14905	// Return the length of the invalid excess
14906	// if we're just parsing
14907	// Otherwise, throw an error or return tokens
14908	if ( parseOnly ) {
14909		return soFar.length;
14910	}
14911
14912	return soFar ?
14913		find.error( selector ) :
14914
14915		// Cache the tokens
14916		tokenCache( selector, groups ).slice( 0 );
14917}
14918
14919function toSelector( tokens ) {
14920	var i = 0,
14921		len = tokens.length,
14922		selector = "";
14923	for ( ; i < len; i++ ) {
14924		selector += tokens[ i ].value;
14925	}
14926	return selector;
14927}
14928
14929function addCombinator( matcher, combinator, base ) {
14930	var dir = combinator.dir,
14931		skip = combinator.next,
14932		key = skip || dir,
14933		checkNonElements = base && key === "parentNode",
14934		doneName = done++;
14935
14936	return combinator.first ?
14937
14938		// Check against closest ancestor/preceding element
14939		function( elem, context, xml ) {
14940			while ( ( elem = elem[ dir ] ) ) {
14941				if ( elem.nodeType === 1 || checkNonElements ) {
14942					return matcher( elem, context, xml );
14943				}
14944			}
14945			return false;
14946		} :
14947
14948		// Check against all ancestor/preceding elements
14949		function( elem, context, xml ) {
14950			var oldCache, outerCache,
14951				newCache = [ dirruns, doneName ];
14952
14953			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
14954			if ( xml ) {
14955				while ( ( elem = elem[ dir ] ) ) {
14956					if ( elem.nodeType === 1 || checkNonElements ) {
14957						if ( matcher( elem, context, xml ) ) {
14958							return true;
14959						}
14960					}
14961				}
14962			} else {
14963				while ( ( elem = elem[ dir ] ) ) {
14964					if ( elem.nodeType === 1 || checkNonElements ) {
14965						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
14966
14967						if ( skip && nodeName( elem, skip ) ) {
14968							elem = elem[ dir ] || elem;
14969						} else if ( ( oldCache = outerCache[ key ] ) &&
14970							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
14971
14972							// Assign to newCache so results back-propagate to previous elements
14973							return ( newCache[ 2 ] = oldCache[ 2 ] );
14974						} else {
14975
14976							// Reuse newcache so results back-propagate to previous elements
14977							outerCache[ key ] = newCache;
14978
14979							// A match means we're done; a fail means we have to keep checking
14980							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
14981								return true;
14982							}
14983						}
14984					}
14985				}
14986			}
14987			return false;
14988		};
14989}
14990
14991function elementMatcher( matchers ) {
14992	return matchers.length > 1 ?
14993		function( elem, context, xml ) {
14994			var i = matchers.length;
14995			while ( i-- ) {
14996				if ( !matchers[ i ]( elem, context, xml ) ) {
14997					return false;
14998				}
14999			}
15000			return true;
15001		} :
15002		matchers[ 0 ];
15003}
15004
15005function multipleContexts( selector, contexts, results ) {
15006	var i = 0,
15007		len = contexts.length;
15008	for ( ; i < len; i++ ) {
15009		find( selector, contexts[ i ], results );
15010	}
15011	return results;
15012}
15013
15014function condense( unmatched, map, filter, context, xml ) {
15015	var elem,
15016		newUnmatched = [],
15017		i = 0,
15018		len = unmatched.length,
15019		mapped = map != null;
15020
15021	for ( ; i < len; i++ ) {
15022		if ( ( elem = unmatched[ i ] ) ) {
15023			if ( !filter || filter( elem, context, xml ) ) {
15024				newUnmatched.push( elem );
15025				if ( mapped ) {
15026					map.push( i );
15027				}
15028			}
15029		}
15030	}
15031
15032	return newUnmatched;
15033}
15034
15035function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
15036	if ( postFilter && !postFilter[ expando ] ) {
15037		postFilter = setMatcher( postFilter );
15038	}
15039	if ( postFinder && !postFinder[ expando ] ) {
15040		postFinder = setMatcher( postFinder, postSelector );
15041	}
15042	return markFunction( function( seed, results, context, xml ) {
15043		var temp, i, elem, matcherOut,
15044			preMap = [],
15045			postMap = [],
15046			preexisting = results.length,
15047
15048			// Get initial elements from seed or context
15049			elems = seed ||
15050				multipleContexts( selector || "*",
15051					context.nodeType ? [ context ] : context, [] ),
15052
15053			// Prefilter to get matcher input, preserving a map for seed-results synchronization
15054			matcherIn = preFilter && ( seed || !selector ) ?
15055				condense( elems, preMap, preFilter, context, xml ) :
15056				elems;
15057
15058		if ( matcher ) {
15059
15060			// If we have a postFinder, or filtered seed, or non-seed postFilter
15061			// or preexisting results,
15062			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
15063
15064				// ...intermediate processing is necessary
15065				[] :
15066
15067				// ...otherwise use results directly
15068				results;
15069
15070			// Find primary matches
15071			matcher( matcherIn, matcherOut, context, xml );
15072		} else {
15073			matcherOut = matcherIn;
15074		}
15075
15076		// Apply postFilter
15077		if ( postFilter ) {
15078			temp = condense( matcherOut, postMap );
15079			postFilter( temp, [], context, xml );
15080
15081			// Un-match failing elements by moving them back to matcherIn
15082			i = temp.length;
15083			while ( i-- ) {
15084				if ( ( elem = temp[ i ] ) ) {
15085					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
15086				}
15087			}
15088		}
15089
15090		if ( seed ) {
15091			if ( postFinder || preFilter ) {
15092				if ( postFinder ) {
15093
15094					// Get the final matcherOut by condensing this intermediate into postFinder contexts
15095					temp = [];
15096					i = matcherOut.length;
15097					while ( i-- ) {
15098						if ( ( elem = matcherOut[ i ] ) ) {
15099
15100							// Restore matcherIn since elem is not yet a final match
15101							temp.push( ( matcherIn[ i ] = elem ) );
15102						}
15103					}
15104					postFinder( null, ( matcherOut = [] ), temp, xml );
15105				}
15106
15107				// Move matched elements from seed to results to keep them synchronized
15108				i = matcherOut.length;
15109				while ( i-- ) {
15110					if ( ( elem = matcherOut[ i ] ) &&
15111						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
15112
15113						seed[ temp ] = !( results[ temp ] = elem );
15114					}
15115				}
15116			}
15117
15118		// Add elements to results, through postFinder if defined
15119		} else {
15120			matcherOut = condense(
15121				matcherOut === results ?
15122					matcherOut.splice( preexisting, matcherOut.length ) :
15123					matcherOut
15124			);
15125			if ( postFinder ) {
15126				postFinder( null, results, matcherOut, xml );
15127			} else {
15128				push.apply( results, matcherOut );
15129			}
15130		}
15131	} );
15132}
15133
15134function matcherFromTokens( tokens ) {
15135	var checkContext, matcher, j,
15136		len = tokens.length,
15137		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
15138		implicitRelative = leadingRelative || Expr.relative[ " " ],
15139		i = leadingRelative ? 1 : 0,
15140
15141		// The foundational matcher ensures that elements are reachable from top-level context(s)
15142		matchContext = addCombinator( function( elem ) {
15143			return elem === checkContext;
15144		}, implicitRelative, true ),
15145		matchAnyContext = addCombinator( function( elem ) {
15146			return indexOf.call( checkContext, elem ) > -1;
15147		}, implicitRelative, true ),
15148		matchers = [ function( elem, context, xml ) {
15149
15150			// Support: IE 11+, Edge 17 - 18+
15151			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
15152			// two documents; shallow comparisons work.
15153			// eslint-disable-next-line eqeqeq
15154			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
15155				( checkContext = context ).nodeType ?
15156					matchContext( elem, context, xml ) :
15157					matchAnyContext( elem, context, xml ) );
15158
15159			// Avoid hanging onto element
15160			// (see https://github.com/jquery/sizzle/issues/299)
15161			checkContext = null;
15162			return ret;
15163		} ];
15164
15165	for ( ; i < len; i++ ) {
15166		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
15167			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
15168		} else {
15169			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
15170
15171			// Return special upon seeing a positional matcher
15172			if ( matcher[ expando ] ) {
15173
15174				// Find the next relative operator (if any) for proper handling
15175				j = ++i;
15176				for ( ; j < len; j++ ) {
15177					if ( Expr.relative[ tokens[ j ].type ] ) {
15178						break;
15179					}
15180				}
15181				return setMatcher(
15182					i > 1 && elementMatcher( matchers ),
15183					i > 1 && toSelector(
15184
15185						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
15186						tokens.slice( 0, i - 1 )
15187							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
15188					).replace( rtrimCSS, "$1" ),
15189					matcher,
15190					i < j && matcherFromTokens( tokens.slice( i, j ) ),
15191					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
15192					j < len && toSelector( tokens )
15193				);
15194			}
15195			matchers.push( matcher );
15196		}
15197	}
15198
15199	return elementMatcher( matchers );
15200}
15201
15202function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
15203	var bySet = setMatchers.length > 0,
15204		byElement = elementMatchers.length > 0,
15205		superMatcher = function( seed, context, xml, results, outermost ) {
15206			var elem, j, matcher,
15207				matchedCount = 0,
15208				i = "0",
15209				unmatched = seed && [],
15210				setMatched = [],
15211				contextBackup = outermostContext,
15212
15213				// We must always have either seed elements or outermost context
15214				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
15215
15216				// Use integer dirruns iff this is the outermost matcher
15217				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
15218				len = elems.length;
15219
15220			if ( outermost ) {
15221
15222				// Support: IE 11+, Edge 17 - 18+
15223				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
15224				// two documents; shallow comparisons work.
15225				// eslint-disable-next-line eqeqeq
15226				outermostContext = context == document || context || outermost;
15227			}
15228
15229			// Add elements passing elementMatchers directly to results
15230			// Support: iOS <=7 - 9 only
15231			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
15232			// elements by id. (see trac-14142)
15233			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
15234				if ( byElement && elem ) {
15235					j = 0;
15236
15237					// Support: IE 11+, Edge 17 - 18+
15238					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
15239					// two documents; shallow comparisons work.
15240					// eslint-disable-next-line eqeqeq
15241					if ( !context && elem.ownerDocument != document ) {
15242						setDocument( elem );
15243						xml = !documentIsHTML;
15244					}
15245					while ( ( matcher = elementMatchers[ j++ ] ) ) {
15246						if ( matcher( elem, context || document, xml ) ) {
15247							push.call( results, elem );
15248							break;
15249						}
15250					}
15251					if ( outermost ) {
15252						dirruns = dirrunsUnique;
15253					}
15254				}
15255
15256				// Track unmatched elements for set filters
15257				if ( bySet ) {
15258
15259					// They will have gone through all possible matchers
15260					if ( ( elem = !matcher && elem ) ) {
15261						matchedCount--;
15262					}
15263
15264					// Lengthen the array for every element, matched or not
15265					if ( seed ) {
15266						unmatched.push( elem );
15267					}
15268				}
15269			}
15270
15271			// `i` is now the count of elements visited above, and adding it to `matchedCount`
15272			// makes the latter nonnegative.
15273			matchedCount += i;
15274
15275			// Apply set filters to unmatched elements
15276			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
15277			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
15278			// no element matchers and no seed.
15279			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
15280			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
15281			// numerically zero.
15282			if ( bySet && i !== matchedCount ) {
15283				j = 0;
15284				while ( ( matcher = setMatchers[ j++ ] ) ) {
15285					matcher( unmatched, setMatched, context, xml );
15286				}
15287
15288				if ( seed ) {
15289
15290					// Reintegrate element matches to eliminate the need for sorting
15291					if ( matchedCount > 0 ) {
15292						while ( i-- ) {
15293							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
15294								setMatched[ i ] = pop.call( results );
15295							}
15296						}
15297					}
15298
15299					// Discard index placeholder values to get only actual matches
15300					setMatched = condense( setMatched );
15301				}
15302
15303				// Add matches to results
15304				push.apply( results, setMatched );
15305
15306				// Seedless set matches succeeding multiple successful matchers stipulate sorting
15307				if ( outermost && !seed && setMatched.length > 0 &&
15308					( matchedCount + setMatchers.length ) > 1 ) {
15309
15310					jQuery.uniqueSort( results );
15311				}
15312			}
15313
15314			// Override manipulation of globals by nested matchers
15315			if ( outermost ) {
15316				dirruns = dirrunsUnique;
15317				outermostContext = contextBackup;
15318			}
15319
15320			return unmatched;
15321		};
15322
15323	return bySet ?
15324		markFunction( superMatcher ) :
15325		superMatcher;
15326}
15327
15328function compile( selector, match /* Internal Use Only */ ) {
15329	var i,
15330		setMatchers = [],
15331		elementMatchers = [],
15332		cached = compilerCache[ selector + " " ];
15333
15334	if ( !cached ) {
15335
15336		// Generate a function of recursive functions that can be used to check each element
15337		if ( !match ) {
15338			match = tokenize( selector );
15339		}
15340		i = match.length;
15341		while ( i-- ) {
15342			cached = matcherFromTokens( match[ i ] );
15343			if ( cached[ expando ] ) {
15344				setMatchers.push( cached );
15345			} else {
15346				elementMatchers.push( cached );
15347			}
15348		}
15349
15350		// Cache the compiled function
15351		cached = compilerCache( selector,
15352			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
15353
15354		// Save selector and tokenization
15355		cached.selector = selector;
15356	}
15357	return cached;
15358}
15359
15360/**
15361 * A low-level selection function that works with jQuery's compiled
15362 *  selector functions
15363 * @param {String|Function} selector A selector or a pre-compiled
15364 *  selector function built with jQuery selector compile
15365 * @param {Element} context
15366 * @param {Array} [results]
15367 * @param {Array} [seed] A set of elements to match against
15368 */
15369function select( selector, context, results, seed ) {
15370	var i, tokens, token, type, find,
15371		compiled = typeof selector === "function" && selector,
15372		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
15373
15374	results = results || [];
15375
15376	// Try to minimize operations if there is only one selector in the list and no seed
15377	// (the latter of which guarantees us context)
15378	if ( match.length === 1 ) {
15379
15380		// Reduce context if the leading compound selector is an ID
15381		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
15382		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
15383				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
15384
15385			context = ( Expr.find.ID(
15386				token.matches[ 0 ].replace( runescape, funescape ),
15387				context
15388			) || [] )[ 0 ];
15389			if ( !context ) {
15390				return results;
15391
15392			// Precompiled matchers will still verify ancestry, so step up a level
15393			} else if ( compiled ) {
15394				context = context.parentNode;
15395			}
15396
15397			selector = selector.slice( tokens.shift().value.length );
15398		}
15399
15400		// Fetch a seed set for right-to-left matching
15401		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
15402		while ( i-- ) {
15403			token = tokens[ i ];
15404
15405			// Abort if we hit a combinator
15406			if ( Expr.relative[ ( type = token.type ) ] ) {
15407				break;
15408			}
15409			if ( ( find = Expr.find[ type ] ) ) {
15410
15411				// Search, expanding context for leading sibling combinators
15412				if ( ( seed = find(
15413					token.matches[ 0 ].replace( runescape, funescape ),
15414					rsibling.test( tokens[ 0 ].type ) &&
15415						testContext( context.parentNode ) || context
15416				) ) ) {
15417
15418					// If seed is empty or no tokens remain, we can return early
15419					tokens.splice( i, 1 );
15420					selector = seed.length && toSelector( tokens );
15421					if ( !selector ) {
15422						push.apply( results, seed );
15423						return results;
15424					}
15425
15426					break;
15427				}
15428			}
15429		}
15430	}
15431
15432	// Compile and execute a filtering function if one is not provided
15433	// Provide `match` to avoid retokenization if we modified the selector above
15434	( compiled || compile( selector, match ) )(
15435		seed,
15436		context,
15437		!documentIsHTML,
15438		results,
15439		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
15440	);
15441	return results;
15442}
15443
15444// One-time assignments
15445
15446// Support: Android <=4.0 - 4.1+
15447// Sort stability
15448support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
15449
15450// Initialize against the default document
15451setDocument();
15452
15453// Support: Android <=4.0 - 4.1+
15454// Detached nodes confoundingly follow *each other*
15455support.sortDetached = assert( function( el ) {
15456
15457	// Should return 1, but returns 4 (following)
15458	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
15459} );
15460
15461jQuery.find = find;
15462
15463// Deprecated
15464jQuery.expr[ ":" ] = jQuery.expr.pseudos;
15465jQuery.unique = jQuery.uniqueSort;
15466
15467// These have always been private, but they used to be documented
15467
15468// as part of Sizzle so let's maintain them in the 3.x line
15469// for backwards compatibility purposes.
15470find.compile = compile;
15471find.select = select;
15472find.setDocument = setDocument
vendor: 12,898 bytes, lines 15472-15988
15472;
15473
15474find.escape = jQuery.escapeSelector;
15475find.getText = jQuery.text;
15476find.isXML = jQuery.isXMLDoc;
15477find.selectors = jQuery.expr;
15478find.support = jQuery.support;
15479find.uniqueSort = jQuery.uniqueSort;
15480
15481	/* eslint-enable */
15482
15483} )();
15484
15485
15486var dir = function( elem, dir, until ) {
15487	var matched = [],
15488		truncate = until !== undefined;
15489
15490	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
15491		if ( elem.nodeType === 1 ) {
15492			if ( truncate && jQuery( elem ).is( until ) ) {
15493				break;
15494			}
15495			matched.push( elem );
15496		}
15497	}
15498	return matched;
15499};
15500
15501
15502var siblings = function( n, elem ) {
15503	var matched = [];
15504
15505	for ( ; n; n = n.nextSibling ) {
15506		if ( n.nodeType === 1 && n !== elem ) {
15507			matched.push( n );
15508		}
15509	}
15510
15511	return matched;
15512};
15513
15514
15515var rneedsContext = jQuery.expr.match.needsContext;
15516
15517var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
15518
15519
15520
15521// Implement the identical functionality for filter and not
15522function winnow( elements, qualifier, not ) {
15523	if ( isFunction( qualifier ) ) {
15524		return jQuery.grep( elements, function( elem, i ) {
15525			return !!qualifier.call( elem, i, elem ) !== not;
15526		} );
15527	}
15528
15529	// Single element
15530	if ( qualifier.nodeType ) {
15531		return jQuery.grep( elements, function( elem ) {
15532			return ( elem === qualifier ) !== not;
15533		} );
15534	}
15535
15536	// Arraylike of elements (jQuery, arguments, Array)
15537	if ( typeof qualifier !== "string" ) {
15538		return jQuery.grep( elements, function( elem ) {
15539			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
15540		} );
15541	}
15542
15543	// Filtered directly for both simple and complex selectors
15544	return jQuery.filter( qualifier, elements, not );
15545}
15546
15547jQuery.filter = function( expr, elems, not ) {
15548	var elem = elems[ 0 ];
15549
15550	if ( not ) {
15551		expr = ":not(" + expr + ")";
15552	}
15553
15554	if ( elems.length === 1 && elem.nodeType === 1 ) {
15555		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
15556	}
15557
15558	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
15559		return elem.nodeType === 1;
15560	} ) );
15561};
15562
15563jQuery.fn.extend( {
15564	find: function( selector ) {
15565		var i, ret,
15566			len = this.length,
15567			self = this;
15568
15569		if ( typeof selector !== "string" ) {
15570			return this.pushStack( jQuery( selector ).filter( function() {
15571				for ( i = 0; i < len; i++ ) {
15572					if ( jQuery.contains( self[ i ], this ) ) {
15573						return true;
15574					}
15575				}
15576			} ) );
15577		}
15578
15579		ret = this.pushStack( [] );
15580
15581		for ( i = 0; i < len; i++ ) {
15582			jQuery.find( selector, self[ i ], ret );
15583		}
15584
15585		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
15586	},
15587	filter: function( selector ) {
15588		return this.pushStack( winnow( this, selector || [], false ) );
15589	},
15590	not: function( selector ) {
15591		return this.pushStack( winnow( this, selector || [], true ) );
15592	},
15593	is: function( selector ) {
15594		return !!winnow(
15595			this,
15596
15597			// If this is a positional/relative selector, check membership in the returned set
15598			// so $("p:first").is("p:last") won't return true for a doc with two "p".
15599			typeof selector === "string" && rneedsContext.test( selector ) ?
15600				jQuery( selector ) :
15601				selector || [],
15602			false
15603		).length;
15604	}
15605} );
15606
15607
15608// Initialize a jQuery object
15609
15610
15611// A central reference to the root jQuery(document)
15612var rootjQuery,
15613
15614	// A simple way to check for HTML strings
15615	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
15616	// Strict HTML recognition (trac-11290: must start with <)
15617	// Shortcut simple #id case for speed
15618	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
15619
15620	init = jQuery.fn.init = function( selector, context, root ) {
15621		var match, elem;
15622
15623		// HANDLE: $(""), $(null), $(undefined), $(false)
15624		if ( !selector ) {
15625			return this;
15626		}
15627
15628		// Method init() accepts an alternate rootjQuery
15629		// so migrate can support jQuery.sub (gh-2101)
15630		root = root || rootjQuery;
15631
15632		// Handle HTML strings
15633		if ( typeof selector === "string" ) {
15634			if ( selector[ 0 ] === "<" &&
15635				selector[ selector.length - 1 ] === ">" &&
15636				selector.length >= 3 ) {
15637
15638				// Assume that strings that start and end with <> are HTML and skip the regex check
15639				match = [ null, selector, null ];
15640
15641			} else {
15642				match = rquickExpr.exec( selector );
15643			}
15644
15645			// Match html or make sure no context is specified for #id
15646			if ( match && ( match[ 1 ] || !context ) ) {
15647
15648				// HANDLE: $(html) -> $(array)
15649				if ( match[ 1 ] ) {
15650					context = context instanceof jQuery ? context[ 0 ] : context;
15651
15652					// Option to run scripts is true for back-compat
15653					// Intentionally let the error be thrown if parseHTML is not present
15654					jQuery.merge( this, jQuery.parseHTML(
15655						match[ 1 ],
15656						context && context.nodeType ? context.ownerDocument || context : document,
15657						true
15658					) );
15659
15660					// HANDLE: $(html, props)
15661					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
15662						for ( match in context ) {
15663
15664							// Properties of context are called as methods if possible
15665							if ( isFunction( this[ match ] ) ) {
15666								this[ match ]( context[ match ] );
15667
15668							// ...and otherwise set as attributes
15669							} else {
15670								this.attr( match, context[ match ] );
15671							}
15672						}
15673					}
15674
15675					return this;
15676
15677				// HANDLE: $(#id)
15678				} else {
15679					elem = document.getElementById( match[ 2 ] );
15680
15681					if ( elem ) {
15682
15683						// Inject the element directly into the jQuery object
15684						this[ 0 ] = elem;
15685						this.length = 1;
15686					}
15687					return this;
15688				}
15689
15690			// HANDLE: $(expr, $(...))
15691			} else if ( !context || context.jquery ) {
15692				return ( context || root ).find( selector );
15693
15694			// HANDLE: $(expr, context)
15695			// (which is just equivalent to: $(context).find(expr)
15696			} else {
15697				return this.constructor( context ).find( selector );
15698			}
15699
15700		// HANDLE: $(DOMElement)
15701		} else if ( selector.nodeType ) {
15702			this[ 0 ] = selector;
15703			this.length = 1;
15704			return this;
15705
15706		// HANDLE: $(function)
15707		// Shortcut for document ready
15708		} else if ( isFunction( selector ) ) {
15709			return root.ready !== undefined ?
15710				root.ready( selector ) :
15711
15712				// Execute immediately if ready is not present
15713				selector( jQuery );
15714		}
15715
15716		return jQuery.makeArray( selector, this );
15717	};
15718
15719// Give the init function the jQuery prototype for later instantiation
15720init.prototype = jQuery.fn;
15721
15722// Initialize central reference
15723rootjQuery = jQuery( document );
15724
15725
15726var rparentsprev = /^(?:parents|prev(?:Until|All))/,
15727
15728	// Methods guaranteed to produce a unique set when starting from a unique set
15729	guaranteedUnique = {
15730		children: true,
15731		contents: true,
15732		next: true,
15733		prev: true
15734	};
15735
15736jQuery.fn.extend( {
15737	has: function( target ) {
15738		var targets = jQuery( target, this ),
15739			l = targets.length;
15740
15741		return this.filter( function() {
15742			var i = 0;
15743			for ( ; i < l; i++ ) {
15744				if ( jQuery.contains( this, targets[ i ] ) ) {
15745					return true;
15746				}
15747			}
15748		} );
15749	},
15750
15751	closest: function( selectors, context ) {
15752		var cur,
15753			i = 0,
15754			l = this.length,
15755			matched = [],
15756			targets = typeof selectors !== "string" && jQuery( selectors );
15757
15758		// Positional selectors never match, since there's no _selection_ context
15759		if ( !rneedsContext.test( selectors ) ) {
15760			for ( ; i < l; i++ ) {
15761				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
15762
15763					// Always skip document fragments
15764					if ( cur.nodeType < 11 && ( targets ?
15765						targets.index( cur ) > -1 :
15766
15767						// Don't pass non-elements to jQuery#find
15768						cur.nodeType === 1 &&
15769							jQuery.find.matchesSelector( cur, selectors ) ) ) {
15770
15771						matched.push( cur );
15772						break;
15773					}
15774				}
15775			}
15776		}
15777
15778		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
15779	},
15780
15781	// Determine the position of an element within the set
15782	index: function( elem ) {
15783
15784		// No argument, return index in parent
15785		if ( !elem ) {
15786			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
15787		}
15788
15789		// Index in selector
15790		if ( typeof elem === "string" ) {
15791			return indexOf.call( jQuery( elem ), this[ 0 ] );
15792		}
15793
15794		// Locate the position of the desired element
15795		return indexOf.call( this,
15796
15797			// If it receives a jQuery object, the first element is used
15798			elem.jquery ? elem[ 0 ] : elem
15799		);
15800	},
15801
15802	add: function( selector, context ) {
15803		return this.pushStack(
15804			jQuery.uniqueSort(
15805				jQuery.merge( this.get(), jQuery( selector, context ) )
15806			)
15807		);
15808	},
15809
15810	addBack: function( selector ) {
15811		return this.add( selector == null ?
15812			this.prevObject : this.prevObject.filter( selector )
15813		);
15814	}
15815} );
15816
15817function sibling( cur, dir ) {
15818	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
15819	return cur;
15820}
15821
15822jQuery.each( {
15823	parent: function( elem ) {
15824		var parent = elem.parentNode;
15825		return parent && parent.nodeType !== 11 ? parent : null;
15826	},
15827	parents: function( elem ) {
15828		return dir( elem, "parentNode" );
15829	},
15830	parentsUntil: function( elem, _i, until ) {
15831		return dir( elem, "parentNode", until );
15832	},
15833	next: function( elem ) {
15834		return sibling( elem, "nextSibling" );
15835	},
15836	prev: function( elem ) {
15837		return sibling( elem, "previousSibling" );
15838	},
15839	nextAll: function( elem ) {
15840		return dir( elem, "nextSibling" );
15841	},
15842	prevAll: function( elem ) {
15843		return dir( elem, "previousSibling" );
15844	},
15845	nextUntil: function( elem, _i, until ) {
15846		return dir( elem, "nextSibling", until );
15847	},
15848	prevUntil: function( elem, _i, until ) {
15849		return dir( elem, "previousSibling", until );
15850	},
15851	siblings: function( elem ) {
15852		return siblings( ( elem.parentNode || {} ).firstChild, elem );
15853	},
15854	children: function( elem ) {
15855		return siblings( elem.firstChild );
15856	},
15857	contents: function( elem ) {
15858		if ( elem.contentDocument != null &&
15859
15860			// Support: IE 11+
15861			// <object> elements with no `data` attribute has an object
15862			// `contentDocument` with a `null` prototype.
15863			getProto( elem.contentDocument ) ) {
15864
15865			return elem.contentDocument;
15866		}
15867
15868		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
15869		// Treat the template element as a regular one in browsers that
15870		// don't support it.
15871		if ( nodeName( elem, "template" ) ) {
15872			elem = elem.content || elem;
15873		}
15874
15875		return jQuery.merge( [], elem.childNodes );
15876	}
15877}, function( name, fn ) {
15878	jQuery.fn[ name ] = function( until, selector ) {
15879		var matched = jQuery.map( this, fn, until );
15880
15881		if ( name.slice( -5 ) !== "Until" ) {
15882			selector = until;
15883		}
15884
15885		if ( selector && typeof selector === "string" ) {
15886			matched = jQuery.filter( selector, matched );
15887		}
15888
15889		if ( this.length > 1 ) {
15890
15891			// Remove duplicates
15892			if ( !guaranteedUnique[ name ] ) {
15893				jQuery.uniqueSort( matched );
15894			}
15895
15896			// Reverse order for parents* and prev-derivatives
15897			if ( rparentsprev.test( name ) ) {
15898				matched.reverse();
15899			}
15900		}
15901
15902		return this.pushStack( matched );
15903	};
15904} );
15905var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
15906
15907
15908
15909// Convert String-formatted options into Object-formatted ones
15910function createOptions( options ) {
15911	var object = {};
15912	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
15913		object[ flag ] = true;
15914	} );
15915	return object;
15916}
15917
15918/*
15919 * Create a callback list using the following parameters:
15920 *
15921 *	options: an optional list of space-separated options that will change how
15922 *			the callback list behaves or a more traditional option object
15923 *
15924 * By default a callback list will act like an event callback list and can be
15925 * "fired" multiple times.
15926 *
15927 * Possible options:
15928 *
15929 *	once:			will ensure the callback list can only be fired once (like a Deferred)
15930 *
15931 *	memory:			will keep track of previous values and will call any callback added
15932 *					after the list has been fired right away with the latest "memorized"
15933 *					values (like a Deferred)
15934 *
15935 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
15936 *
15937 *	stopOnFalse:	interrupt callings when a callback returns false
15938 *
15939 */
15940jQuery.Callbacks = function( options ) {
15941
15942	// Convert options from String-formatted to Object-formatted if needed
15943	// (we check in cache first)
15944	options = typeof options === "string" ?
15945		createOptions( options ) :
15946		jQuery.extend( {}, options );
15947
15948	var // Flag to know if list is currently firing
15949		firing,
15950
15951		// Last fire value for non-forgettable lists
15952		memory,
15953
15954		// Flag to know if list was already fired
15955		fired,
15956
15957		// Flag to prevent firing
15958		locked,
15959
15960		// Actual callback list
15961		list = [],
15962
15963		// Queue of execution data for repeatable lists
15964		queue = [],
15965
15966		// Index of currently firing callback (modified by add/remove as needed)
15967		firingIndex = -1,
15968
15969		// Fire callbacks
15970		fire = function() {
15971
15972			// Enforce single-firing
15973			locked = locked || options.once;
15974
15975			// Execute callbacks for all pending executions,
15976			// respecting firingIndex overrides and runtime changes
15977			fired = firing = true;
15978			for ( ; queue.length; firingIndex = -1 ) {
15979				memory = queue.shift();
15980				while ( ++firingIndex < list.length ) {
15981
15982					// Run callback and check for early termination
15983					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
15984						options.stopOnFalse ) {
15985
15986						// Jump to end and forget the data so .add doesn't re-fire
15987						firingIndex = list.length;
15988						memory = false;
vendor: 4,918 bytes, lines 15989-16198
15989					}
15990				}
15991			}
15992
15993			// Forget the data if we're done with it
15994			if ( !options.memory ) {
15995				memory = false;
15996			}
15997
15998			firing = false;
15999
16000			// Clean up if we're done firing for good
16001			if ( locked ) {
16002
16003				// Keep an empty list if we have data for future add calls
16004				if ( memory ) {
16005					list = [];
16006
16007				// Otherwise, this object is spent
16008				} else {
16009					list = "";
16010				}
16011			}
16012		},
16013
16014		// Actual Callbacks object
16015		self = {
16016
16017			// Add a callback or a collection of callbacks to the list
16018			add: function() {
16019				if ( list ) {
16020
16021					// If we have memory from a past run, we should fire after adding
16022					if ( memory && !firing ) {
16023						firingIndex = list.length - 1;
16024						queue.push( memory );
16025					}
16026
16027					( function add( args ) {
16028						jQuery.each( args, function( _, arg ) {
16029							if ( isFunction( arg ) ) {
16030								if ( !options.unique || !self.has( arg ) ) {
16031									list.push( arg );
16032								}
16033							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
16034
16035								// Inspect recursively
16036								add( arg );
16037							}
16038						} );
16039					} )( arguments );
16040
16041					if ( memory && !firing ) {
16042						fire();
16043					}
16044				}
16045				return this;
16046			},
16047
16048			// Remove a callback from the list
16049			remove: function() {
16050				jQuery.each( arguments, function( _, arg ) {
16051					var index;
16052					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
16053						list.splice( index, 1 );
16054
16055						// Handle firing indexes
16056						if ( index <= firingIndex ) {
16057							firingIndex--;
16058						}
16059					}
16060				} );
16061				return this;
16062			},
16063
16064			// Check if a given callback is in the list.
16065			// If no argument is given, return whether or not list has callbacks attached.
16066			has: function( fn ) {
16067				return fn ?
16068					jQuery.inArray( fn, list ) > -1 :
16069					list.length > 0;
16070			},
16071
16072			// Remove all callbacks from the list
16073			empty: function() {
16074				if ( list ) {
16075					list = [];
16076				}
16077				return this;
16078			},
16079
16080			// Disable .fire and .add
16081			// Abort any current/pending executions
16082			// Clear all callbacks and values
16083			disable: function() {
16084				locked = queue = [];
16085				list = memory = "";
16086				return this;
16087			},
16088			disabled: function() {
16089				return !list;
16090			},
16091
16092			// Disable .fire
16093			// Also disable .add unless we have memory (since it would have no effect)
16094			// Abort any pending executions
16095			lock: function() {
16096				locked = queue = [];
16097				if ( !memory && !firing ) {
16098					list = memory = "";
16099				}
16100				return this;
16101			},
16102			locked: function() {
16103				return !!locked;
16104			},
16105
16106			// Call all callbacks with the given context and arguments
16107			fireWith: function( context, args ) {
16108				if ( !locked ) {
16109					args = args || [];
16110					args = [ context, args.slice ? args.slice() : args ];
16111					queue.push( args );
16112					if ( !firing ) {
16113						fire();
16114					}
16115				}
16116				return this;
16117			},
16118
16119			// Call all the callbacks with the given arguments
16120			fire: function() {
16121				self.fireWith( this, arguments );
16122				return this;
16123			},
16124
16125			// To know if the callbacks have already been called at least once
16126			fired: function() {
16127				return !!fired;
16128			}
16129		};
16130
16131	return self;
16132};
16133
16134
16135function Identity( v ) {
16136	return v;
16137}
16138function Thrower( ex ) {
16139	throw ex;
16140}
16141
16142function adoptValue( value, resolve, reject, noValue ) {
16143	var method;
16144
16145	try {
16146
16147		// Check for promise aspect first to privilege synchronous behavior
16148		if ( value && isFunction( ( method = value.promise ) ) ) {
16149			method.call( value ).done( resolve ).fail( reject );
16150
16151		// Other thenables
16152		} else if ( value && isFunction( ( method = value.then ) ) ) {
16153			method.call( value, resolve, reject );
16154
16155		// Other non-thenables
16156		} else {
16157
16158			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
16159			// * false: [ value ].slice( 0 ) => resolve( value )
16160			// * true: [ value ].slice( 1 ) => resolve()
16161			resolve.apply( undefined, [ value ].slice( noValue ) );
16162		}
16163
16164	// For Promises/A+, convert exceptions into rejections
16165	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
16166	// Deferred#then to conditionally suppress rejection.
16167	} catch ( value ) {
16168
16169		// Support: Android 4.0 only
16170		// Strict mode functions invoked without .call/.apply get global-object context
16171		reject.apply( undefined, [ value ] );
16172	}
16173}
16174
16175jQuery.extend( {
16176
16177	Deferred: function( func ) {
16178		var tuples = [
16179
16180				// action, add listener, callbacks,
16181				// ... .then handlers, argument index, [final state]
16182				[ "notify", "progress", jQuery.Callbacks( "memory" ),
16183					jQuery.Callbacks( "memory" ), 2 ],
16184				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
16185					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
16186				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
16187					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
16188			],
16189			state = "pending",
16190			promise = {
16191				state: function() {
16192					return state;
16193				},
16194				always: function() {
16195					deferred.done( arguments ).fail( arguments );
16196					return this;
16197				},
16198				"catch": function( fn ) {
vendor: 67,037 bytes, lines 16199-18686
16199					return promise.then( null, fn );
16200				},
16201
16202				// Keep pipe for back-compat
16203				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
16204					var fns = arguments;
16205
16206					return jQuery.Deferred( function( newDefer ) {
16207						jQuery.each( tuples, function( _i, tuple ) {
16208
16209							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
16210							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
16211
16212							// deferred.progress(function() { bind to newDefer or newDefer.notify })
16213							// deferred.done(function() { bind to newDefer or newDefer.resolve })
16214							// deferred.fail(function() { bind to newDefer or newDefer.reject })
16215							deferred[ tuple[ 1 ] ]( function() {
16216								var returned = fn && fn.apply( this, arguments );
16217								if ( returned && isFunction( returned.promise ) ) {
16218									returned.promise()
16219										.progress( newDefer.notify )
16220										.done( newDefer.resolve )
16221										.fail( newDefer.reject );
16222								} else {
16223									newDefer[ tuple[ 0 ] + "With" ](
16224										this,
16225										fn ? [ returned ] : arguments
16226									);
16227								}
16228							} );
16229						} );
16230						fns = null;
16231					} ).promise();
16232				},
16233				then: function( onFulfilled, onRejected, onProgress ) {
16234					var maxDepth = 0;
16235					function resolve( depth, deferred, handler, special ) {
16236						return function() {
16237							var that = this,
16238								args = arguments,
16239								mightThrow = function() {
16240									var returned, then;
16241
16242									// Support: Promises/A+ section 2.3.3.3.3
16243									// https://promisesaplus.com/#point-59
16244									// Ignore double-resolution attempts
16245									if ( depth < maxDepth ) {
16246										return;
16247									}
16248
16249									returned = handler.apply( that, args );
16250
16251									// Support: Promises/A+ section 2.3.1
16252									// https://promisesaplus.com/#point-48
16253									if ( returned === deferred.promise() ) {
16254										throw new TypeError( "Thenable self-resolution" );
16255									}
16256
16257									// Support: Promises/A+ sections 2.3.3.1, 3.5
16258									// https://promisesaplus.com/#point-54
16259									// https://promisesaplus.com/#point-75
16260									// Retrieve `then` only once
16261									then = returned &&
16262
16263										// Support: Promises/A+ section 2.3.4
16264										// https://promisesaplus.com/#point-64
16265										// Only check objects and functions for thenability
16266										( typeof returned === "object" ||
16267											typeof returned === "function" ) &&
16268										returned.then;
16269
16270									// Handle a returned thenable
16271									if ( isFunction( then ) ) {
16272
16273										// Special processors (notify) just wait for resolution
16274										if ( special ) {
16275											then.call(
16276												returned,
16277												resolve( maxDepth, deferred, Identity, special ),
16278												resolve( maxDepth, deferred, Thrower, special )
16279											);
16280
16281										// Normal processors (resolve) also hook into progress
16282										} else {
16283
16284											// ...and disregard older resolution values
16285											maxDepth++;
16286
16287											then.call(
16288												returned,
16289												resolve( maxDepth, deferred, Identity, special ),
16290												resolve( maxDepth, deferred, Thrower, special ),
16291												resolve( maxDepth, deferred, Identity,
16292													deferred.notifyWith )
16293											);
16294										}
16295
16296									// Handle all other returned values
16297									} else {
16298
16299										// Only substitute handlers pass on context
16300										// and multiple values (non-spec behavior)
16301										if ( handler !== Identity ) {
16302											that = undefined;
16303											args = [ returned ];
16304										}
16305
16306										// Process the value(s)
16307										// Default process is resolve
16308										( special || deferred.resolveWith )( that, args );
16309									}
16310								},
16311
16312								// Only normal processors (resolve) catch and reject exceptions
16313								process = special ?
16314									mightThrow :
16315									function() {
16316										try {
16317											mightThrow();
16318										} catch ( e ) {
16319
16320											if ( jQuery.Deferred.exceptionHook ) {
16321												jQuery.Deferred.exceptionHook( e,
16322													process.error );
16323											}
16324
16325											// Support: Promises/A+ section 2.3.3.3.4.1
16326											// https://promisesaplus.com/#point-61
16327											// Ignore post-resolution exceptions
16328											if ( depth + 1 >= maxDepth ) {
16329
16330												// Only substitute handlers pass on context
16331												// and multiple values (non-spec behavior)
16332												if ( handler !== Thrower ) {
16333													that = undefined;
16334													args = [ e ];
16335												}
16336
16337												deferred.rejectWith( that, args );
16338											}
16339										}
16340									};
16341
16342							// Support: Promises/A+ section 2.3.3.3.1
16343							// https://promisesaplus.com/#point-57
16344							// Re-resolve promises immediately to dodge false rejection from
16345							// subsequent errors
16346							if ( depth ) {
16347								process();
16348							} else {
16349
16350								// Call an optional hook to record the error, in case of exception
16351								// since it's otherwise lost when execution goes async
16352								if ( jQuery.Deferred.getErrorHook ) {
16353									process.error = jQuery.Deferred.getErrorHook();
16354
16355								// The deprecated alias of the above. While the name suggests
16356								// returning the stack, not an error instance, jQuery just passes
16357								// it directly to `console.warn` so both will work; an instance
16358								// just better cooperates with source maps.
16359								} else if ( jQuery.Deferred.getStackHook ) {
16360									process.error = jQuery.Deferred.getStackHook();
16361								}
16362								window.setTimeout( process );
16363							}
16364						};
16365					}
16366
16367					return jQuery.Deferred( function( newDefer ) {
16368
16369						// progress_handlers.add( ... )
16370						tuples[ 0 ][ 3 ].add(
16371							resolve(
16372								0,
16373								newDefer,
16374								isFunction( onProgress ) ?
16375									onProgress :
16376									Identity,
16377								newDefer.notifyWith
16378							)
16379						);
16380
16381						// fulfilled_handlers.add( ... )
16382						tuples[ 1 ][ 3 ].add(
16383							resolve(
16384								0,
16385								newDefer,
16386								isFunction( onFulfilled ) ?
16387									onFulfilled :
16388									Identity
16389							)
16390						);
16391
16392						// rejected_handlers.add( ... )
16393						tuples[ 2 ][ 3 ].add(
16394							resolve(
16395								0,
16396								newDefer,
16397								isFunction( onRejected ) ?
16398									onRejected :
16399									Thrower
16400							)
16401						);
16402					} ).promise();
16403				},
16404
16405				// Get a promise for this deferred
16406				// If obj is provided, the promise aspect is added to the object
16407				promise: function( obj ) {
16408					return obj != null ? jQuery.extend( obj, promise ) : promise;
16409				}
16410			},
16411			deferred = {};
16412
16413		// Add list-specific methods
16414		jQuery.each( tuples, function( i, tuple ) {
16415			var list = tuple[ 2 ],
16416				stateString = tuple[ 5 ];
16417
16418			// promise.progress = list.add
16419			// promise.done = list.add
16420			// promise.fail = list.add
16421			promise[ tuple[ 1 ] ] = list.add;
16422
16423			// Handle state
16424			if ( stateString ) {
16425				list.add(
16426					function() {
16427
16428						// state = "resolved" (i.e., fulfilled)
16429						// state = "rejected"
16430						state = stateString;
16431					},
16432
16433					// rejected_callbacks.disable
16434					// fulfilled_callbacks.disable
16435					tuples[ 3 - i ][ 2 ].disable,
16436
16437					// rejected_handlers.disable
16438					// fulfilled_handlers.disable
16439					tuples[ 3 - i ][ 3 ].disable,
16440
16441					// progress_callbacks.lock
16442					tuples[ 0 ][ 2 ].lock,
16443
16444					// progress_handlers.lock
16445					tuples[ 0 ][ 3 ].lock
16446				);
16447			}
16448
16449			// progress_handlers.fire
16450			// fulfilled_handlers.fire
16451			// rejected_handlers.fire
16452			list.add( tuple[ 3 ].fire );
16453
16454			// deferred.notify = function() { deferred.notifyWith(...) }
16455			// deferred.resolve = function() { deferred.resolveWith(...) }
16456			// deferred.reject = function() { deferred.rejectWith(...) }
16457			deferred[ tuple[ 0 ] ] = function() {
16458				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
16459				return this;
16460			};
16461
16462			// deferred.notifyWith = list.fireWith
16463			// deferred.resolveWith = list.fireWith
16464			// deferred.rejectWith = list.fireWith
16465			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
16466		} );
16467
16468		// Make the deferred a promise
16469		promise.promise( deferred );
16470
16471		// Call given func if any
16472		if ( func ) {
16473			func.call( deferred, deferred );
16474		}
16475
16476		// All done!
16477		return deferred;
16478	},
16479
16480	// Deferred helper
16481	when: function( singleValue ) {
16482		var
16483
16484			// count of uncompleted subordinates
16485			remaining = arguments.length,
16486
16487			// count of unprocessed arguments
16488			i = remaining,
16489
16490			// subordinate fulfillment data
16491			resolveContexts = Array( i ),
16492			resolveValues = slice.call( arguments ),
16493
16494			// the primary Deferred
16495			primary = jQuery.Deferred(),
16496
16497			// subordinate callback factory
16498			updateFunc = function( i ) {
16499				return function( value ) {
16500					resolveContexts[ i ] = this;
16501					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
16502					if ( !( --remaining ) ) {
16503						primary.resolveWith( resolveContexts, resolveValues );
16504					}
16505				};
16506			};
16507
16508		// Single- and empty arguments are adopted like Promise.resolve
16509		if ( remaining <= 1 ) {
16510			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
16511				!remaining );
16512
16513			// Use .then() to unwrap secondary thenables (cf. gh-3000)
16514			if ( primary.state() === "pending" ||
16515				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
16516
16517				return primary.then();
16518			}
16519		}
16520
16521		// Multiple arguments are aggregated like Promise.all array elements
16522		while ( i-- ) {
16523			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
16524		}
16525
16526		return primary.promise();
16527	}
16528} );
16529
16530
16531// These usually indicate a programmer mistake during development,
16532// warn about them ASAP rather than swallowing them by default.
16533var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
16534
16535// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
16536// captured before the async barrier to get the original error cause
16537// which may otherwise be hidden.
16538jQuery.Deferred.exceptionHook = function( error, asyncError ) {
16539
16540	// Support: IE 8 - 9 only
16541	// Console exists when dev tools are open, which can happen at any time
16542	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
16543		window.console.warn( "jQuery.Deferred exception: " + error.message,
16544			error.stack, asyncError );
16545	}
16546};
16547
16548
16549
16550
16551jQuery.readyException = function( error ) {
16552	window.setTimeout( function() {
16553		throw error;
16554	} );
16555};
16556
16557
16558
16559
16560// The deferred used on DOM ready
16561var readyList = jQuery.Deferred();
16562
16563jQuery.fn.ready = function( fn ) {
16564
16565	readyList
16566		.then( fn )
16567
16568		// Wrap jQuery.readyException in a function so that the lookup
16569		// happens at the time of error handling instead of callback
16570		// registration.
16571		.catch( function( error ) {
16572			jQuery.readyException( error );
16573		} );
16574
16575	return this;
16576};
16577
16578jQuery.extend( {
16579
16580	// Is the DOM ready to be used? Set to true once it occurs.
16581	isReady: false,
16582
16583	// A counter to track how many items to wait for before
16584	// the ready event fires. See trac-6781
16585	readyWait: 1,
16586
16587	// Handle when the DOM is ready
16588	ready: function( wait ) {
16589
16590		// Abort if there are pending holds or we're already ready
16591		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
16592			return;
16593		}
16594
16595		// Remember that the DOM is ready
16596		jQuery.isReady = true;
16597
16598		// If a normal DOM Ready event fired, decrement, and wait if need be
16599		if ( wait !== true && --jQuery.readyWait > 0 ) {
16600			return;
16601		}
16602
16603		// If there are functions bound, to execute
16604		readyList.resolveWith( document, [ jQuery ] );
16605	}
16606} );
16607
16608jQuery.ready.then = readyList.then;
16609
16610// The ready event handler and self cleanup method
16611function completed() {
16612	document.removeEventListener( "DOMContentLoaded", completed );
16613	window.removeEventListener( "load", completed );
16614	jQuery.ready();
16615}
16616
16617// Catch cases where $(document).ready() is called
16618// after the browser event has already occurred.
16619// Support: IE <=9 - 10 only
16620// Older IE sometimes signals "interactive" too soon
16621if ( document.readyState === "complete" ||
16622	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
16623
16624	// Handle it asynchronously to allow scripts the opportunity to delay ready
16625	window.setTimeout( jQuery.ready );
16626
16627} else {
16628
16629	// Use the handy event callback
16630	document.addEventListener( "DOMContentLoaded", completed );
16631
16632	// A fallback to window.onload, that will always work
16633	window.addEventListener( "load", completed );
16634}
16635
16636
16637
16638
16639// Multifunctional method to get and set values of a collection
16640// The value/s can optionally be executed if it's a function
16641var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
16642	var i = 0,
16643		len = elems.length,
16644		bulk = key == null;
16645
16646	// Sets many values
16647	if ( toType( key ) === "object" ) {
16648		chainable = true;
16649		for ( i in key ) {
16650			access( elems, fn, i, key[ i ], true, emptyGet, raw );
16651		}
16652
16653	// Sets one value
16654	} else if ( value !== undefined ) {
16655		chainable = true;
16656
16657		if ( !isFunction( value ) ) {
16658			raw = true;
16659		}
16660
16661		if ( bulk ) {
16662
16663			// Bulk operations run against the entire set
16664			if ( raw ) {
16665				fn.call( elems, value );
16666				fn = null;
16667
16668			// ...except when executing function values
16669			} else {
16670				bulk = fn;
16671				fn = function( elem, _key, value ) {
16672					return bulk.call( jQuery( elem ), value );
16673				};
16674			}
16675		}
16676
16677		if ( fn ) {
16678			for ( ; i < len; i++ ) {
16679				fn(
16680					elems[ i ], key, raw ?
16681						value :
16682						value.call( elems[ i ], i, fn( elems[ i ], key ) )
16683				);
16684			}
16685		}
16686	}
16687
16688	if ( chainable ) {
16689		return elems;
16690	}
16691
16692	// Gets
16693	if ( bulk ) {
16694		return fn.call( elems );
16695	}
16696
16697	return len ? fn( elems[ 0 ], key ) : emptyGet;
16698};
16699
16700
16701// Matches dashed string for camelizing
16702var rmsPrefix = /^-ms-/,
16703	rdashAlpha = /-([a-z])/g;
16704
16705// Used by camelCase as callback to replace()
16706function fcamelCase( _all, letter ) {
16707	return letter.toUpperCase();
16708}
16709
16710// Convert dashed to camelCase; used by the css and data modules
16711// Support: IE <=9 - 11, Edge 12 - 15
16712// Microsoft forgot to hump their vendor prefix (trac-9572)
16713function camelCase( string ) {
16714	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
16715}
16716var acceptData = function( owner ) {
16717
16718	// Accepts only:
16719	//  - Node
16720	//    - Node.ELEMENT_NODE
16721	//    - Node.DOCUMENT_NODE
16722	//  - Object
16723	//    - Any
16724	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
16725};
16726
16727
16728
16729
16730function Data() {
16731	this.expando = jQuery.expando + Data.uid++;
16732}
16733
16734Data.uid = 1;
16735
16736Data.prototype = {
16737
16738	cache: function( owner ) {
16739
16740		// Check if the owner object already has a cache
16741		var value = owner[ this.expando ];
16742
16743		// If not, create one
16744		if ( !value ) {
16745			value = {};
16746
16747			// We can accept data for non-element nodes in modern browsers,
16748			// but we should not, see trac-8335.
16749			// Always return an empty object.
16750			if ( acceptData( owner ) ) {
16751
16752				// If it is a node unlikely to be stringify-ed or looped over
16753				// use plain assignment
16754				if ( owner.nodeType ) {
16755					owner[ this.expando ] = value;
16756
16757				// Otherwise secure it in a non-enumerable property
16758				// configurable must be true to allow the property to be
16759				// deleted when data is removed
16760				} else {
16761					Object.defineProperty( owner, this.expando, {
16762						value: value,
16763						configurable: true
16764					} );
16765				}
16766			}
16767		}
16768
16769		return value;
16770	},
16771	set: function( owner, data, value ) {
16772		var prop,
16773			cache = this.cache( owner );
16774
16775		// Handle: [ owner, key, value ] args
16776		// Always use camelCase key (gh-2257)
16777		if ( typeof data === "string" ) {
16778			cache[ camelCase( data ) ] = value;
16779
16780		// Handle: [ owner, { properties } ] args
16781		} else {
16782
16783			// Copy the properties one-by-one to the cache object
16784			for ( prop in data ) {
16785				cache[ camelCase( prop ) ] = data[ prop ];
16786			}
16787		}
16788		return cache;
16789	},
16790	get: function( owner, key ) {
16791		return key === undefined ?
16792			this.cache( owner ) :
16793
16794			// Always use camelCase key (gh-2257)
16795			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
16796	},
16797	access: function( owner, key, value ) {
16798
16799		// In cases where either:
16800		//
16801		//   1. No key was specified
16802		//   2. A string key was specified, but no value provided
16803		//
16804		// Take the "read" path and allow the get method to determine
16805		// which value to return, respectively either:
16806		//
16807		//   1. The entire cache object
16808		//   2. The data stored at the key
16809		//
16810		if ( key === undefined ||
16811				( ( key && typeof key === "string" ) && value === undefined ) ) {
16812
16813			return this.get( owner, key );
16814		}
16815
16816		// When the key is not a string, or both a key and value
16817		// are specified, set or extend (existing objects) with either:
16818		//
16819		//   1. An object of properties
16820		//   2. A key and value
16821		//
16822		this.set( owner, key, value );
16823
16824		// Since the "set" path can have two possible entry points
16825		// return the expected data based on which path was taken[*]
16826		return value !== undefined ? value : key;
16827	},
16828	remove: function( owner, key ) {
16829		var i,
16830			cache = owner[ this.expando ];
16831
16832		if ( cache === undefined ) {
16833			return;
16834		}
16835
16836		if ( key !== undefined ) {
16837
16838			// Support array or space separated string of keys
16839			if ( Array.isArray( key ) ) {
16840
16841				// If key is an array of keys...
16842				// We always set camelCase keys, so remove that.
16843				key = key.map( camelCase );
16844			} else {
16845				key = camelCase( key );
16846
16847				// If a key with the spaces exists, use it.
16848				// Otherwise, create an array by matching non-whitespace
16849				key = key in cache ?
16850					[ key ] :
16851					( key.match( rnothtmlwhite ) || [] );
16852			}
16853
16854			i = key.length;
16855
16856			while ( i-- ) {
16857				delete cache[ key[ i ] ];
16858			}
16859		}
16860
16861		// Remove the expando if there's no more data
16862		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
16863
16864			// Support: Chrome <=35 - 45
16865			// Webkit & Blink performance suffers when deleting properties
16866			// from DOM nodes, so set to undefined instead
16867			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
16868			if ( owner.nodeType ) {
16869				owner[ this.expando ] = undefined;
16870			} else {
16871				delete owner[ this.expando ];
16872			}
16873		}
16874	},
16875	hasData: function( owner ) {
16876		var cache = owner[ this.expando ];
16877		return cache !== undefined && !jQuery.isEmptyObject( cache );
16878	}
16879};
16880var dataPriv = new Data();
16881
16882var dataUser = new Data();
16883
16884
16885
16886//	Implementation Summary
16887//
16888//	1. Enforce API surface and semantic compatibility with 1.9.x branch
16889//	2. Improve the module's maintainability by reducing the storage
16890//		paths to a single mechanism.
16891//	3. Use the same single mechanism to support "private" and "user" data.
16892//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
16893//	5. Avoid exposing implementation details on user objects (eg. expando properties)
16894//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
16895
16896var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
16897	rmultiDash = /[A-Z]/g;
16898
16899function getData( data ) {
16900	if ( data === "true" ) {
16901		return true;
16902	}
16903
16904	if ( data === "false" ) {
16905		return false;
16906	}
16907
16908	if ( data === "null" ) {
16909		return null;
16910	}
16911
16912	// Only convert to a number if it doesn't change the string
16913	if ( data === +data + "" ) {
16914		return +data;
16915	}
16916
16917	if ( rbrace.test( data ) ) {
16918		return JSON.parse( data );
16919	}
16920
16921	return data;
16922}
16923
16924function dataAttr( elem, key, data ) {
16925	var name;
16926
16927	// If nothing was found internally, try to fetch any
16928	// data from the HTML5 data-* attribute
16929	if ( data === undefined && elem.nodeType === 1 ) {
16930		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
16931		data = elem.getAttribute( name );
16932
16933		if ( typeof data === "string" ) {
16934			try {
16935				data = getData( data );
16936			} catch ( e ) {}
16937
16938			// Make sure we set the data so it isn't changed later
16939			dataUser.set( elem, key, data );
16940		} else {
16941			data = undefined;
16942		}
16943	}
16944	return data;
16945}
16946
16947jQuery.extend( {
16948	hasData: function( elem ) {
16949		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
16950	},
16951
16952	data: function( elem, name, data ) {
16953		return dataUser.access( elem, name, data );
16954	},
16955
16956	removeData: function( elem, name ) {
16957		dataUser.remove( elem, name );
16958	},
16959
16960	// TODO: Now that all calls to _data and _removeData have been replaced
16961	// with direct calls to dataPriv methods, these can be deprecated.
16962	_data: function( elem, name, data ) {
16963		return dataPriv.access( elem, name, data );
16964	},
16965
16966	_removeData: function( elem, name ) {
16967		dataPriv.remove( elem, name );
16968	}
16969} );
16970
16971jQuery.fn.extend( {
16972	data: function( key, value ) {
16973		var i, name, data,
16974			elem = this[ 0 ],
16975			attrs = elem && elem.attributes;
16976
16977		// Gets all values
16978		if ( key === undefined ) {
16979			if ( this.length ) {
16980				data = dataUser.get( elem );
16981
16982				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
16983					i = attrs.length;
16984					while ( i-- ) {
16985
16986						// Support: IE 11 only
16987						// The attrs elements can be null (trac-14894)
16988						if ( attrs[ i ] ) {
16989							name = attrs[ i ].name;
16990							if ( name.indexOf( "data-" ) === 0 ) {
16991								name = camelCase( name.slice( 5 ) );
16992								dataAttr( elem, name, data[ name ] );
16993							}
16994						}
16995					}
16996					dataPriv.set( elem, "hasDataAttrs", true );
16997				}
16998			}
16999
17000			return data;
17001		}
17002
17003		// Sets multiple values
17004		if ( typeof key === "object" ) {
17005			return this.each( function() {
17006				dataUser.set( this, key );
17007			} );
17008		}
17009
17010		return access( this, function( value ) {
17011			var data;
17012
17013			// The calling jQuery object (element matches) is not empty
17014			// (and therefore has an element appears at this[ 0 ]) and the
17015			// `value` parameter was not undefined. An empty jQuery object
17016			// will result in `undefined` for elem = this[ 0 ] which will
17017			// throw an exception if an attempt to read a data cache is made.
17018			if ( elem && value === undefined ) {
17019
17020				// Attempt to get data from the cache
17021				// The key will always be camelCased in Data
17022				data = dataUser.get( elem, key );
17023				if ( data !== undefined ) {
17024					return data;
17025				}
17026
17027				// Attempt to "discover" the data in
17028				// HTML5 custom data-* attrs
17029				data = dataAttr( elem, key );
17030				if ( data !== undefined ) {
17031					return data;
17032				}
17033
17034				// We tried really hard, but the data doesn't exist.
17035				return;
17036			}
17037
17038			// Set the data...
17039			this.each( function() {
17040
17041				// We always store the camelCased key
17042				dataUser.set( this, key, value );
17043			} );
17044		}, null, value, arguments.length > 1, null, true );
17045	},
17046
17047	removeData: function( key ) {
17048		return this.each( function() {
17049			dataUser.remove( this, key );
17050		} );
17051	}
17052} );
17053
17054
17055jQuery.extend( {
17056	queue: function( elem, type, data ) {
17057		var queue;
17058
17059		if ( elem ) {
17060			type = ( type || "fx" ) + "queue";
17061			queue = dataPriv.get( elem, type );
17062
17063			// Speed up dequeue by getting out quickly if this is just a lookup
17064			if ( data ) {
17065				if ( !queue || Array.isArray( data ) ) {
17066					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
17067				} else {
17068					queue.push( data );
17069				}
17070			}
17071			return queue || [];
17072		}
17073	},
17074
17075	dequeue: function( elem, type ) {
17076		type = type || "fx";
17077
17078		var queue = jQuery.queue( elem, type ),
17079			startLength = queue.length,
17080			fn = queue.shift(),
17081			hooks = jQuery._queueHooks( elem, type ),
17082			next = function() {
17083				jQuery.dequeue( elem, type );
17084			};
17085
17086		// If the fx queue is dequeued, always remove the progress sentinel
17087		if ( fn === "inprogress" ) {
17088			fn = queue.shift();
17089			startLength--;
17090		}
17091
17092		if ( fn ) {
17093
17094			// Add a progress sentinel to prevent the fx queue from being
17095			// automatically dequeued
17096			if ( type === "fx" ) {
17097				queue.unshift( "inprogress" );
17098			}
17099
17100			// Clear up the last queue stop function
17101			delete hooks.stop;
17102			fn.call( elem, next, hooks );
17103		}
17104
17105		if ( !startLength && hooks ) {
17106			hooks.empty.fire();
17107		}
17108	},
17109
17110	// Not public - generate a queueHooks object, or return the current one
17111	_queueHooks: function( elem, type ) {
17112		var key = type + "queueHooks";
17113		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
17114			empty: jQuery.Callbacks( "once memory" ).add( function() {
17115				dataPriv.remove( elem, [ type + "queue", key ] );
17116			} )
17117		} );
17118	}
17119} );
17120
17121jQuery.fn.extend( {
17122	queue: function( type, data ) {
17123		var setter = 2;
17124
17125		if ( typeof type !== "string" ) {
17126			data = type;
17127			type = "fx";
17128			setter--;
17129		}
17130
17131		if ( arguments.length < setter ) {
17132			return jQuery.queue( this[ 0 ], type );
17133		}
17134
17135		return data === undefined ?
17136			this :
17137			this.each( function() {
17138				var queue = jQuery.queue( this, type, data );
17139
17140				// Ensure a hooks for this queue
17141				jQuery._queueHooks( this, type );
17142
17143				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
17144					jQuery.dequeue( this, type );
17145				}
17146			} );
17147	},
17148	dequeue: function( type ) {
17149		return this.each( function() {
17150			jQuery.dequeue( this, type );
17151		} );
17152	},
17153	clearQueue: function( type ) {
17154		return this.queue( type || "fx", [] );
17155	},
17156
17157	// Get a promise resolved when queues of a certain type
17158	// are emptied (fx is the type by default)
17159	promise: function( type, obj ) {
17160		var tmp,
17161			count = 1,
17162			defer = jQuery.Deferred(),
17163			elements = this,
17164			i = this.length,
17165			resolve = function() {
17166				if ( !( --count ) ) {
17167					defer.resolveWith( elements, [ elements ] );
17168				}
17169			};
17170
17171		if ( typeof type !== "string" ) {
17172			obj = type;
17173			type = undefined;
17174		}
17175		type = type || "fx";
17176
17177		while ( i-- ) {
17178			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
17179			if ( tmp && tmp.empty ) {
17180				count++;
17181				tmp.empty.add( resolve );
17182			}
17183		}
17184		resolve();
17185		return defer.promise( obj );
17186	}
17187} );
17188var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
17189
17190var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
17191
17192
17193var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
17194
17195var documentElement = document.documentElement;
17196
17197
17198
17199	var isAttached = function( elem ) {
17200			return jQuery.contains( elem.ownerDocument, elem );
17201		},
17202		composed = { composed: true };
17203
17204	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
17205	// Check attachment across shadow DOM boundaries when possible (gh-3504)
17206	// Support: iOS 10.0-10.2 only
17207	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
17208	// leading to errors. We need to check for `getRootNode`.
17209	if ( documentElement.getRootNode ) {
17210		isAttached = function( elem ) {
17211			return jQuery.contains( elem.ownerDocument, elem ) ||
17212				elem.getRootNode( composed ) === elem.ownerDocument;
17213		};
17214	}
17215var isHiddenWithinTree = function( elem, el ) {
17216
17217		// isHiddenWithinTree might be called from jQuery#filter function;
17218		// in that case, element will be second argument
17219		elem = el || elem;
17220
17221		// Inline style trumps all
17222		return elem.style.display === "none" ||
17223			elem.style.display === "" &&
17224
17225			// Otherwise, check computed style
17226			// Support: Firefox <=43 - 45
17227			// Disconnected elements can have computed display: none, so first confirm that elem is
17228			// in the document.
17229			isAttached( elem ) &&
17230
17231			jQuery.css( elem, "display" ) === "none";
17232	};
17233
17234
17235
17236function adjustCSS( elem, prop, valueParts, tween ) {
17237	var adjusted, scale,
17238		maxIterations = 20,
17239		currentValue = tween ?
17240			function() {
17241				return tween.cur();
17242			} :
17243			function() {
17244				return jQuery.css( elem, prop, "" );
17245			},
17246		initial = currentValue(),
17247		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
17248
17249		// Starting value computation is required for potential unit mismatches
17250		initialInUnit = elem.nodeType &&
17251			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
17252			rcssNum.exec( jQuery.css( elem, prop ) );
17253
17254	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
17255
17256		// Support: Firefox <=54
17257		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
17258		initial = initial / 2;
17259
17260		// Trust units reported by jQuery.css
17261		unit = unit || initialInUnit[ 3 ];
17262
17263		// Iteratively approximate from a nonzero starting point
17264		initialInUnit = +initial || 1;
17265
17266		while ( maxIterations-- ) {
17267
17268			// Evaluate and update our best guess (doubling guesses that zero out).
17269			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
17270			jQuery.style( elem, prop, initialInUnit + unit );
17271			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
17272				maxIterations = 0;
17273			}
17274			initialInUnit = initialInUnit / scale;
17275
17276		}
17277
17278		initialInUnit = initialInUnit * 2;
17279		jQuery.style( elem, prop, initialInUnit + unit );
17280
17281		// Make sure we update the tween properties later on
17282		valueParts = valueParts || [];
17283	}
17284
17285	if ( valueParts ) {
17286		initialInUnit = +initialInUnit || +initial || 0;
17287
17288		// Apply relative offset (+=/-=) if specified
17289		adjusted = valueParts[ 1 ] ?
17290			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
17291			+valueParts[ 2 ];
17292		if ( tween ) {
17293			tween.unit = unit;
17294			tween.start = initialInUnit;
17295			tween.end = adjusted;
17296		}
17297	}
17298	return adjusted;
17299}
17300
17301
17302var defaultDisplayMap = {};
17303
17304function getDefaultDisplay( elem ) {
17305	var temp,
17306		doc = elem.ownerDocument,
17307		nodeName = elem.nodeName,
17308		display = defaultDisplayMap[ nodeName ];
17309
17310	if ( display ) {
17311		return display;
17312	}
17313
17314	temp = doc.body.appendChild( doc.createElement( nodeName ) );
17315	display = jQuery.css( temp, "display" );
17316
17317	temp.parentNode.removeChild( temp );
17318
17319	if ( display === "none" ) {
17320		display = "block";
17321	}
17322	defaultDisplayMap[ nodeName ] = display;
17323
17324	return display;
17325}
17326
17327function showHide( elements, show ) {
17328	var display, elem,
17329		values = [],
17330		index = 0,
17331		length = elements.length;
17332
17333	// Determine new display value for elements that need to change
17334	for ( ; index < length; index++ ) {
17335		elem = elements[ index ];
17336		if ( !elem.style ) {
17337			continue;
17338		}
17339
17340		display = elem.style.display;
17341		if ( show ) {
17342
17343			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
17344			// check is required in this first loop unless we have a nonempty display value (either
17345			// inline or about-to-be-restored)
17346			if ( display === "none" ) {
17347				values[ index ] = dataPriv.get( elem, "display" ) || null;
17348				if ( !values[ index ] ) {
17349					elem.style.display = "";
17350				}
17351			}
17352			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
17353				values[ index ] = getDefaultDisplay( elem );
17354			}
17355		} else {
17356			if ( display !== "none" ) {
17357				values[ index ] = "none";
17358
17359				// Remember what we're overwriting
17360				dataPriv.set( elem, "display", display );
17361			}
17362		}
17363	}
17364
17365	// Set the display of the elements in a second loop to avoid constant reflow
17366	for ( index = 0; index < length; index++ ) {
17367		if ( values[ index ] != null ) {
17368			elements[ index ].style.display = values[ index ];
17369		}
17370	}
17371
17372	return elements;
17373}
17374
17375jQuery.fn.extend( {
17376	show: function() {
17377		return showHide( this, true );
17378	},
17379	hide: function() {
17380		return showHide( this );
17381	},
17382	toggle: function( state ) {
17383		if ( typeof state === "boolean" ) {
17384			return state ? this.show() : this.hide();
17385		}
17386
17387		return this.each( function() {
17388			if ( isHiddenWithinTree( this ) ) {
17389				jQuery( this ).show();
17390			} else {
17391				jQuery( this ).hide();
17392			}
17393		} );
17394	}
17395} );
17396var rcheckableType = ( /^(?:checkbox|radio)$/i );
17397
17398var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
17399
17400var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
17401
17402
17403
17404( function() {
17405	var fragment = document.createDocumentFragment(),
17406		div = fragment.appendChild( document.createElement( "div" ) ),
17407		input = document.createElement( "input" );
17408
17409	// Support: Android 4.0 - 4.3 only
17410	// Check state lost if the name is set (trac-11217)
17411	// Support: Windows Web Apps (WWA)
17412	// `name` and `type` must use .setAttribute for WWA (trac-14901)
17413	input.setAttribute( "type", "radio" );
17414	input.setAttribute( "checked", "checked" );
17415	input.setAttribute( "name", "t" );
17416
17417	div.appendChild( input );
17418
17419	// Support: Android <=4.1 only
17420	// Older WebKit doesn't clone checked state correctly in fragments
17421	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
17422
17423	// Support: IE <=11 only
17424	// Make sure textarea (and checkbox) defaultValue is properly cloned
17425	div.innerHTML = "<textarea>x</textarea>";
17426	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
17427
17428	// Support: IE <=9 only
17429	// IE <=9 replaces <option> tags with their contents when inserted outside of
17430	// the select element.
17431	div.innerHTML = "<option></option>";
17432	support.option = !!div.lastChild;
17433} )();
17434
17435
17436// We have to close these tags to support XHTML (trac-13200)
17437var wrapMap = {
17438
17439	// XHTML parsers do not magically insert elements in the
17440	// same way that tag soup parsers do. So we cannot shorten
17441	// this by omitting <tbody> or other required elements.
17442	thead: [ 1, "<table>", "</table>" ],
17443	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
17444	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
17445	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
17446
17447	_default: [ 0, "", "" ]
17448};
17449
17450wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
17451wrapMap.th = wrapMap.td;
17452
17453// Support: IE <=9 only
17454if ( !support.option ) {
17455	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
17456}
17457
17458
17459function getAll( context, tag ) {
17460
17461	// Support: IE <=9 - 11 only
17462	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
17463	var ret;
17464
17465	if ( typeof context.getElementsByTagName !== "undefined" ) {
17466		ret = context.getElementsByTagName( tag || "*" );
17467
17468	} else if ( typeof context.querySelectorAll !== "undefined" ) {
17469		ret = context.querySelectorAll( tag || "*" );
17470
17471	} else {
17472		ret = [];
17473	}
17474
17475	if ( tag === undefined || tag && nodeName( context, tag ) ) {
17476		return jQuery.merge( [ context ], ret );
17477	}
17478
17479	return ret;
17480}
17481
17482
17483// Mark scripts as having already been evaluated
17484function setGlobalEval( elems, refElements ) {
17485	var i = 0,
17486		l = elems.length;
17487
17488	for ( ; i < l; i++ ) {
17489		dataPriv.set(
17490			elems[ i ],
17491			"globalEval",
17492			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
17493		);
17494	}
17495}
17496
17497
17498var rhtml = /<|&#?\w+;/;
17499
17500function buildFragment( elems, context, scripts, selection, ignored ) {
17501	var elem, tmp, tag, wrap, attached, j,
17502		fragment = context.createDocumentFragment(),
17503		nodes = [],
17504		i = 0,
17505		l = elems.length;
17506
17507	for ( ; i < l; i++ ) {
17508		elem = elems[ i ];
17509
17510		if ( elem || elem === 0 ) {
17511
17512			// Add nodes directly
17513			if ( toType( elem ) === "object" ) {
17514
17515				// Support: Android <=4.0 only, PhantomJS 1 only
17516				// push.apply(_, arraylike) throws on ancient WebKit
17517				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
17518
17519			// Convert non-html into a text node
17520			} else if ( !rhtml.test( elem ) ) {
17521				nodes.push( context.createTextNode( elem ) );
17522
17523			// Convert html into DOM nodes
17524			} else {
17525				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
17526
17527				// Deserialize a standard representation
17528				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
17529				wrap = wrapMap[ tag ] || wrapMap._default;
17530				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
17531
17532				// Descend through wrappers to the right content
17533				j = wrap[ 0 ];
17534				while ( j-- ) {
17535					tmp = tmp.lastChild;
17536				}
17537
17538				// Support: Android <=4.0 only, PhantomJS 1 only
17539				// push.apply(_, arraylike) throws on ancient WebKit
17540				jQuery.merge( nodes, tmp.childNodes );
17541
17542				// Remember the top-level container
17543				tmp = fragment.firstChild;
17544
17545				// Ensure the created nodes are orphaned (trac-12392)
17546				tmp.textContent = "";
17547			}
17548		}
17549	}
17550
17551	// Remove wrapper from fragment
17552	fragment.textContent = "";
17553
17554	i = 0;
17555	while ( ( elem = nodes[ i++ ] ) ) {
17556
17557		// Skip elements already in the context collection (trac-4087)
17558		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
17559			if ( ignored ) {
17560				ignored.push( elem );
17561			}
17562			continue;
17563		}
17564
17565		attached = isAttached( elem );
17566
17567		// Append to fragment
17568		tmp = getAll( fragment.appendChild( elem ), "script" );
17569
17570		// Preserve script evaluation history
17571		if ( attached ) {
17572			setGlobalEval( tmp );
17573		}
17574
17575		// Capture executables
17576		if ( scripts ) {
17577			j = 0;
17578			while ( ( elem = tmp[ j++ ] ) ) {
17579				if ( rscriptType.test( elem.type || "" ) ) {
17580					scripts.push( elem );
17581				}
17582			}
17583		}
17584	}
17585
17586	return fragment;
17587}
17588
17589
17590var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
17591
17592function returnTrue() {
17593	return true;
17594}
17595
17596function returnFalse() {
17597	return false;
17598}
17599
17600function on( elem, types, selector, data, fn, one ) {
17601	var origFn, type;
17602
17603	// Types can be a map of types/handlers
17604	if ( typeof types === "object" ) {
17605
17606		// ( types-Object, selector, data )
17607		if ( typeof selector !== "string" ) {
17608
17609			// ( types-Object, data )
17610			data = data || selector;
17611			selector = undefined;
17612		}
17613		for ( type in types ) {
17614			on( elem, type, selector, data, types[ type ], one );
17615		}
17616		return elem;
17617	}
17618
17619	if ( data == null && fn == null ) {
17620
17621		// ( types, fn )
17622		fn = selector;
17623		data = selector = undefined;
17624	} else if ( fn == null ) {
17625		if ( typeof selector === "string" ) {
17626
17627			// ( types, selector, fn )
17628			fn = data;
17629			data = undefined;
17630		} else {
17631
17632			// ( types, data, fn )
17633			fn = data;
17634			data = selector;
17635			selector = undefined;
17636		}
17637	}
17638	if ( fn === false ) {
17639		fn = returnFalse;
17640	} else if ( !fn ) {
17641		return elem;
17642	}
17643
17644	if ( one === 1 ) {
17645		origFn = fn;
17646		fn = function( event ) {
17647
17648			// Can use an empty set, since event contains the info
17649			jQuery().off( event );
17650			return origFn.apply( this, arguments );
17651		};
17652
17653		// Use same guid so caller can remove using origFn
17654		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
17655	}
17656	return elem.each( function() {
17657		jQuery.event.add( this, types, fn, data, selector );
17658	} );
17659}
17660
17661/*
17662 * Helper functions for managing events -- not part of the public interface.
17663 * Props to Dean Edwards' addEvent library for many of the ideas.
17664 */
17665jQuery.event = {
17666
17667	global: {},
17668
17669	add: function( elem, types, handler, data, selector ) {
17670
17671		var handleObjIn, eventHandle, tmp,
17672			events, t, handleObj,
17673			special, handlers, type, namespaces, origType,
17674			elemData = dataPriv.get( elem );
17675
17676		// Only attach events to objects that accept data
17677		if ( !acceptData( elem ) ) {
17678			return;
17679		}
17680
17681		// Caller can pass in an object of custom data in lieu of the handler
17682		if ( handler.handler ) {
17683			handleObjIn = handler;
17684			handler = handleObjIn.handler;
17685			selector = handleObjIn.selector;
17686		}
17687
17688		// Ensure that invalid selectors throw exceptions at attach time
17689		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
17690		if ( selector ) {
17691			jQuery.find.matchesSelector( documentElement, selector );
17692		}
17693
17694		// Make sure that the handler has a unique ID, used to find/remove it later
17695		if ( !handler.guid ) {
17696			handler.guid = jQuery.guid++;
17697		}
17698
17699		// Init the element's event structure and main handler, if this is the first
17700		if ( !( events = elemData.events ) ) {
17701			events = elemData.events = Object.create( null );
17702		}
17703		if ( !( eventHandle = elemData.handle ) ) {
17704			eventHandle = elemData.handle = function( e ) {
17705
17706				// Discard the second event of a jQuery.event.trigger() and
17707				// when an event is called after a page has unloaded
17708				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
17709					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
17710			};
17711		}
17712
17713		// Handle multiple events separated by a space
17714		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
17715		t = types.length;
17716		while ( t-- ) {
17717			tmp = rtypenamespace.exec( types[ t ] ) || [];
17718			type = origType = tmp[ 1 ];
17719			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
17720
17721			// There *must* be a type, no attaching namespace-only handlers
17722			if ( !type ) {
17723				continue;
17724			}
17725
17726			// If event changes its type, use the special event handlers for the changed type
17727			special = jQuery.event.special[ type ] || {};
17728
17729			// If selector defined, determine special event api type, otherwise given type
17730			type = ( selector ? special.delegateType : special.bindType ) || type;
17731
17732			// Update special based on newly reset type
17733			special = jQuery.event.special[ type ] || {};
17734
17735			// handleObj is passed to all event handlers
17736			handleObj = jQuery.extend( {
17737				type: type,
17738				origType: origType,
17739				data: data,
17740				handler: handler,
17741				guid: handler.guid,
17742				selector: selector,
17743				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
17744				namespace: namespaces.join( "." )
17745			}, handleObjIn );
17746
17747			// Init the event handler queue if we're the first
17748			if ( !( handlers = events[ type ] ) ) {
17749				handlers = events[ type ] = [];
17750				handlers.delegateCount = 0;
17751
17752				// Only use addEventListener if the special events handler returns false
17753				if ( !special.setup ||
17754					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
17755
17756					if ( elem.addEventListener ) {
17757						elem.addEventListener( type, eventHandle );
17758					}
17759				}
17760			}
17761
17762			if ( special.add ) {
17763				special.add.call( elem, handleObj );
17764
17765				if ( !handleObj.handler.guid ) {
17766					handleObj.handler.guid = handler.guid;
17767				}
17768			}
17769
17770			// Add to the element's handler list, delegates in front
17771			if ( selector ) {
17772				handlers.splice( handlers.delegateCount++, 0, handleObj );
17773			} else {
17774				handlers.push( handleObj );
17775			}
17776
17777			// Keep track of which events have ever been used, for event optimization
17778			jQuery.event.global[ type ] = true;
17779		}
17780
17781	},
17782
17783	// Detach an event or set of events from an element
17784	remove: function( elem, types, handler, selector, mappedTypes ) {
17785
17786		var j, origCount, tmp,
17787			events, t, handleObj,
17788			special, handlers, type, namespaces, origType,
17789			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
17790
17791		if ( !elemData || !( events = elemData.events ) ) {
17792			return;
17793		}
17794
17795		// Once for each type.namespace in types; type may be omitted
17796		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
17797		t = types.length;
17798		while ( t-- ) {
17799			tmp = rtypenamespace.exec( types[ t ] ) || [];
17800			type = origType = tmp[ 1 ];
17801			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
17802
17803			// Unbind all events (on this namespace, if provided) for the element
17804			if ( !type ) {
17805				for ( type in events ) {
17806					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
17807				}
17808				continue;
17809			}
17810
17811			special = jQuery.event.special[ type ] || {};
17812			type = ( selector ? special.delegateType : special.bindType ) || type;
17813			handlers = events[ type ] || [];
17814			tmp = tmp[ 2 ] &&
17815				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
17816
17817			// Remove matching events
17818			origCount = j = handlers.length;
17819			while ( j-- ) {
17820				handleObj = handlers[ j ];
17821
17822				if ( ( mappedTypes || origType === handleObj.origType ) &&
17823					( !handler || handler.guid === handleObj.guid ) &&
17824					( !tmp || tmp.test( handleObj.namespace ) ) &&
17825					( !selector || selector === handleObj.selector ||
17826						selector === "**" && handleObj.selector ) ) {
17827					handlers.splice( j, 1 );
17828
17829					if ( handleObj.selector ) {
17830						handlers.delegateCount--;
17831					}
17832					if ( special.remove ) {
17833						special.remove.call( elem, handleObj );
17834					}
17835				}
17836			}
17837
17838			// Remove generic event handler if we removed something and no more handlers exist
17839			// (avoids potential for endless recursion during removal of special event handlers)
17840			if ( origCount && !handlers.length ) {
17841				if ( !special.teardown ||
17842					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
17843
17844					jQuery.removeEvent( elem, type, elemData.handle );
17845				}
17846
17847				delete events[ type ];
17848			}
17849		}
17850
17851		// Remove data and the expando if it's no longer used
17852		if ( jQuery.isEmptyObject( events ) ) {
17853			dataPriv.remove( elem, "handle events" );
17854		}
17855	},
17856
17857	dispatch: function( nativeEvent ) {
17858
17859		var i, j, ret, matched, handleObj, handlerQueue,
17860			args = new Array( arguments.length ),
17861
17862			// Make a writable jQuery.Event from the native event object
17863			event = jQuery.event.fix( nativeEvent ),
17864
17865			handlers = (
17866				dataPriv.get( this, "events" ) || Object.create( null )
17867			)[ event.type ] || [],
17868			special = jQuery.event.special[ event.type ] || {};
17869
17870		// Use the fix-ed jQuery.Event rather than the (read-only) native event
17871		args[ 0 ] = event;
17872
17873		for ( i = 1; i < arguments.length; i++ ) {
17874			args[ i ] = arguments[ i ];
17875		}
17876
17877		event.delegateTarget = this;
17878
17879		// Call the preDispatch hook for the mapped type, and let it bail if desired
17880		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
17881			return;
17882		}
17883
17884		// Determine handlers
17885		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
17886
17887		// Run delegates first; they may want to stop propagation beneath us
17888		i = 0;
17889		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
17890			event.currentTarget = matched.elem;
17891
17892			j = 0;
17893			while ( ( handleObj = matched.handlers[ j++ ] ) &&
17894				!event.isImmediatePropagationStopped() ) {
17895
17896				// If the event is namespaced, then each handler is only invoked if it is
17897				// specially universal or its namespaces are a superset of the event's.
17898				if ( !event.rnamespace || handleObj.namespace === false ||
17899					event.rnamespace.test( handleObj.namespace ) ) {
17900
17901					event.handleObj = handleObj;
17902					event.data = handleObj.data;
17903
17904					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
17905						handleObj.handler ).apply( matched.elem, args );
17906
17907					if ( ret !== undefined ) {
17908						if ( ( event.result = ret ) === false ) {
17909							event.preventDefault();
17910							event.stopPropagation();
17911						}
17912					}
17913				}
17914			}
17915		}
17916
17917		// Call the postDispatch hook for the mapped type
17918		if ( special.postDispatch ) {
17919			special.postDispatch.call( this, event );
17920		}
17921
17922		return event.result;
17923	},
17924
17925	handlers: function( event, handlers ) {
17926		var i, handleObj, sel, matchedHandlers, matchedSelectors,
17927			handlerQueue = [],
17928			delegateCount = handlers.delegateCount,
17929			cur = event.target;
17930
17931		// Find delegate handlers
17932		if ( delegateCount &&
17933
17934			// Support: IE <=9
17935			// Black-hole SVG <use> instance trees (trac-13180)
17936			cur.nodeType &&
17937
17938			// Support: Firefox <=42
17939			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
17940			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
17941			// Support: IE 11 only
17942			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
17943			!( event.type === "click" && event.button >= 1 ) ) {
17944
17945			for ( ; cur !== this; cur = cur.parentNode || this ) {
17946
17947				// Don't check non-elements (trac-13208)
17948				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
17949				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
17950					matchedHandlers = [];
17951					matchedSelectors = {};
17952					for ( i = 0; i < delegateCount; i++ ) {
17953						handleObj = handlers[ i ];
17954
17955						// Don't conflict with Object.prototype properties (trac-13203)
17956						sel = handleObj.selector + " ";
17957
17958						if ( matchedSelectors[ sel ] === undefined ) {
17959							matchedSelectors[ sel ] = handleObj.needsContext ?
17960								jQuery( sel, this ).index( cur ) > -1 :
17961								jQuery.find( sel, this, null, [ cur ] ).length;
17962						}
17963						if ( matchedSelectors[ sel ] ) {
17964							matchedHandlers.push( handleObj );
17965						}
17966					}
17967					if ( matchedHandlers.length ) {
17968						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
17969					}
17970				}
17971			}
17972		}
17973
17974		// Add the remaining (directly-bound) handlers
17975		cur = this;
17976		if ( delegateCount < handlers.length ) {
17977			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
17978		}
17979
17980		return handlerQueue;
17981	},
17982
17983	addProp: function( name, hook ) {
17984		Object.defineProperty( jQuery.Event.prototype, name, {
17985			enumerable: true,
17986			configurable: true,
17987
17988			get: isFunction( hook ) ?
17989				function() {
17990					if ( this.originalEvent ) {
17991						return hook( this.originalEvent );
17992					}
17993				} :
17994				function() {
17995					if ( this.originalEvent ) {
17996						return this.originalEvent[ name ];
17997					}
17998				},
17999
18000			set: function( value ) {
18001				Object.defineProperty( this, name, {
18002					enumerable: true,
18003					configurable: true,
18004					writable: true,
18005					value: value
18006				} );
18007			}
18008		} );
18009	},
18010
18011	fix: function( originalEvent ) {
18012		return originalEvent[ jQuery.expando ] ?
18013			originalEvent :
18014			new jQuery.Event( originalEvent );
18015	},
18016
18017	special: {
18018		load: {
18019
18020			// Prevent triggered image.load events from bubbling to window.load
18021			noBubble: true
18022		},
18023		click: {
18024
18025			// Utilize native event to ensure correct state for checkable inputs
18026			setup: function( data ) {
18027
18028				// For mutual compressibility with _default, replace `this` access with a local var.
18029				// `|| data` is dead code meant only to preserve the variable through minification.
18030				var el = this || data;
18031
18032				// Claim the first handler
18033				if ( rcheckableType.test( el.type ) &&
18034					el.click && nodeName( el, "input" ) ) {
18035
18036					// dataPriv.set( el, "click", ... )
18037					leverageNative( el, "click", true );
18038				}
18039
18040				// Return false to allow normal processing in the caller
18041				return false;
18042			},
18043			trigger: function( data ) {
18044
18045				// For mutual compressibility with _default, replace `this` access with a local var.
18046				// `|| data` is dead code meant only to preserve the variable through minification.
18047				var el = this || data;
18048
18049				// Force setup before triggering a click
18050				if ( rcheckableType.test( el.type ) &&
18051					el.click && nodeName( el, "input" ) ) {
18052
18053					leverageNative( el, "click" );
18054				}
18055
18056				// Return non-false to allow normal event-path propagation
18057				return true;
18058			},
18059
18060			// For cross-browser consistency, suppress native .click() on links
18061			// Also prevent it if we're currently inside a leveraged native-event stack
18062			_default: function( event ) {
18063				var target = event.target;
18064				return rcheckableType.test( target.type ) &&
18065					target.click && nodeName( target, "input" ) &&
18066					dataPriv.get( target, "click" ) ||
18067					nodeName( target, "a" );
18068			}
18069		},
18070
18071		beforeunload: {
18072			postDispatch: function( event ) {
18073
18074				// Support: Firefox 20+
18075				// Firefox doesn't alert if the returnValue field is not set.
18076				if ( event.result !== undefined && event.originalEvent ) {
18077					event.originalEvent.returnValue = event.result;
18078				}
18079			}
18080		}
18081	}
18082};
18083
18084// Ensure the presence of an event listener that handles manually-triggered
18085// synthetic events by interrupting progress until reinvoked in response to
18086// *native* events that it fires directly, ensuring that state changes have
18087// already occurred before other listeners are invoked.
18088function leverageNative( el, type, isSetup ) {
18089
18090	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
18091	if ( !isSetup ) {
18092		if ( dataPriv.get( el, type ) === undefined ) {
18093			jQuery.event.add( el, type, returnTrue );
18094		}
18095		return;
18096	}
18097
18098	// Register the controller as a special universal handler for all event namespaces
18099	dataPriv.set( el, type, false );
18100	jQuery.event.add( el, type, {
18101		namespace: false,
18102		handler: function( event ) {
18103			var result,
18104				saved = dataPriv.get( this, type );
18105
18106			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
18107
18108				// Interrupt processing of the outer synthetic .trigger()ed event
18109				if ( !saved ) {
18110
18111					// Store arguments for use when handling the inner native event
18112					// There will always be at least one argument (an event object), so this array
18113					// will not be confused with a leftover capture object.
18114					saved = slice.call( arguments );
18115					dataPriv.set( this, type, saved );
18116
18117					// Trigger the native event and capture its result
18118					this[ type ]();
18119					result = dataPriv.get( this, type );
18120					dataPriv.set( this, type, false );
18121
18122					if ( saved !== result ) {
18123
18124						// Cancel the outer synthetic event
18125						event.stopImmediatePropagation();
18126						event.preventDefault();
18127
18128						return result;
18129					}
18130
18131				// If this is an inner synthetic event for an event with a bubbling surrogate
18132				// (focus or blur), assume that the surrogate already propagated from triggering
18133				// the native event and prevent that from happening again here.
18134				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
18135				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
18136				// less bad than duplication.
18137				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
18138					event.stopPropagation();
18139				}
18140
18141			// If this is a native event triggered above, everything is now in order
18142			// Fire an inner synthetic event with the original arguments
18143			} else if ( saved ) {
18144
18145				// ...and capture the result
18146				dataPriv.set( this, type, jQuery.event.trigger(
18147					saved[ 0 ],
18148					saved.slice( 1 ),
18149					this
18150				) );
18151
18152				// Abort handling of the native event by all jQuery handlers while allowing
18153				// native handlers on the same element to run. On target, this is achieved
18154				// by stopping immediate propagation just on the jQuery event. However,
18155				// the native event is re-wrapped by a jQuery one on each level of the
18156				// propagation so the only way to stop it for jQuery is to stop it for
18157				// everyone via native `stopPropagation()`. This is not a problem for
18158				// focus/blur which don't bubble, but it does also stop click on checkboxes
18159				// and radios. We accept this limitation.
18160				event.stopPropagation();
18161				event.isImmediatePropagationStopped = returnTrue;
18162			}
18163		}
18164	} );
18165}
18166
18167jQuery.removeEvent = function( elem, type, handle ) {
18168
18169	// This "if" is needed for plain objects
18170	if ( elem.removeEventListener ) {
18171		elem.removeEventListener( type, handle );
18172	}
18173};
18174
18175jQuery.Event = function( src, props ) {
18176
18177	// Allow instantiation without the 'new' keyword
18178	if ( !( this instanceof jQuery.Event ) ) {
18179		return new jQuery.Event( src, props );
18180	}
18181
18182	// Event object
18183	if ( src && src.type ) {
18184		this.originalEvent = src;
18185		this.type = src.type;
18186
18187		// Events bubbling up the document may have been marked as prevented
18188		// by a handler lower down the tree; reflect the correct value.
18189		this.isDefaultPrevented = src.defaultPrevented ||
18190				src.defaultPrevented === undefined &&
18191
18192				// Support: Android <=2.3 only
18193				src.returnValue === false ?
18194			returnTrue :
18195			returnFalse;
18196
18197		// Create target properties
18198		// Support: Safari <=6 - 7 only
18199		// Target should not be a text node (trac-504, trac-13143)
18200		this.target = ( src.target && src.target.nodeType === 3 ) ?
18201			src.target.parentNode :
18202			src.target;
18203
18204		this.currentTarget = src.currentTarget;
18205		this.relatedTarget = src.relatedTarget;
18206
18207	// Event type
18208	} else {
18209		this.type = src;
18210	}
18211
18212	// Put explicitly provided properties onto the event object
18213	if ( props ) {
18214		jQuery.extend( this, props );
18215	}
18216
18217	// Create a timestamp if incoming event doesn't have one
18218	this.timeStamp = src && src.timeStamp || Date.now();
18219
18220	// Mark it as fixed
18221	this[ jQuery.expando ] = true;
18222};
18223
18224// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
18225// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
18226jQuery.Event.prototype = {
18227	constructor: jQuery.Event,
18228	isDefaultPrevented: returnFalse,
18229	isPropagationStopped: returnFalse,
18230	isImmediatePropagationStopped: returnFalse,
18231	isSimulated: false,
18232
18233	preventDefault: function() {
18234		var e = this.originalEvent;
18235
18236		this.isDefaultPrevented = returnTrue;
18237
18238		if ( e && !this.isSimulated ) {
18239			e.preventDefault();
18240		}
18241	},
18242	stopPropagation: function() {
18243		var e = this.originalEvent;
18244
18245		this.isPropagationStopped = returnTrue;
18246
18247		if ( e && !this.isSimulated ) {
18248			e.stopPropagation();
18249		}
18250	},
18251	stopImmediatePropagation: function() {
18252		var e = this.originalEvent;
18253
18254		this.isImmediatePropagationStopped = returnTrue;
18255
18256		if ( e && !this.isSimulated ) {
18257			e.stopImmediatePropagation();
18258		}
18259
18260		this.stopPropagation();
18261	}
18262};
18263
18264// Includes all common event props including KeyEvent and MouseEvent specific props
18265jQuery.each( {
18266	altKey: true,
18267	bubbles: true,
18268	cancelable: true,
18269	changedTouches: true,
18270	ctrlKey: true,
18271	detail: true,
18272	eventPhase: true,
18273	metaKey: true,
18274	pageX: true,
18275	pageY: true,
18276	shiftKey: true,
18277	view: true,
18278	"char": true,
18279	code: true,
18280	charCode: true,
18281	key: true,
18282	keyCode: true,
18283	button: true,
18284	buttons: true,
18285	clientX: true,
18286	clientY: true,
18287	offsetX: true,
18288	offsetY: true,
18289	pointerId: true,
18290	pointerType: true,
18291	screenX: true,
18292	screenY: true,
18293	targetTouches: true,
18294	toElement: true,
18295	touches: true,
18296	which: true
18297}, jQuery.event.addProp );
18298
18299jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
18300
18301	function focusMappedHandler( nativeEvent ) {
18302		if ( document.documentMode ) {
18303
18304			// Support: IE 11+
18305			// Attach a single focusin/focusout handler on the document while someone wants
18306			// focus/blur. This is because the former are synchronous in IE while the latter
18307			// are async. In other browsers, all those handlers are invoked synchronously.
18308
18309			// `handle` from private data would already wrap the event, but we need
18310			// to change the `type` here.
18311			var handle = dataPriv.get( this, "handle" ),
18312				event = jQuery.event.fix( nativeEvent );
18313			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
18314			event.isSimulated = true;
18315
18316			// First, handle focusin/focusout
18317			handle( nativeEvent );
18318
18319			// ...then, handle focus/blur
18320			//
18321			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
18322			// invoking the handler at the lower level.
18323			if ( event.target === event.currentTarget ) {
18324
18325				// The setup part calls `leverageNative`, which, in turn, calls
18326				// `jQuery.event.add`, so event handle will already have been set
18327				// by this point.
18328				handle( event );
18329			}
18330		} else {
18331
18332			// For non-IE browsers, attach a single capturing handler on the document
18333			// while someone wants focusin/focusout.
18334			jQuery.event.simulate( delegateType, nativeEvent.target,
18335				jQuery.event.fix( nativeEvent ) );
18336		}
18337	}
18338
18339	jQuery.event.special[ type ] = {
18340
18341		// Utilize native event if possible so blur/focus sequence is correct
18342		setup: function() {
18343
18344			var attaches;
18345
18346			// Claim the first handler
18347			// dataPriv.set( this, "focus", ... )
18348			// dataPriv.set( this, "blur", ... )
18349			leverageNative( this, type, true );
18350
18351			if ( document.documentMode ) {
18352
18353				// Support: IE 9 - 11+
18354				// We use the same native handler for focusin & focus (and focusout & blur)
18355				// so we need to coordinate setup & teardown parts between those events.
18356				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
18357				attaches = dataPriv.get( this, delegateType );
18358				if ( !attaches ) {
18359					this.addEventListener( delegateType, focusMappedHandler );
18360				}
18361				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
18362			} else {
18363
18364				// Return false to allow normal processing in the caller
18365				return false;
18366			}
18367		},
18368		trigger: function() {
18369
18370			// Force setup before trigger
18371			leverageNative( this, type );
18372
18373			// Return non-false to allow normal event-path propagation
18374			return true;
18375		},
18376
18377		teardown: function() {
18378			var attaches;
18379
18380			if ( document.documentMode ) {
18381				attaches = dataPriv.get( this, delegateType ) - 1;
18382				if ( !attaches ) {
18383					this.removeEventListener( delegateType, focusMappedHandler );
18384					dataPriv.remove( this, delegateType );
18385				} else {
18386					dataPriv.set( this, delegateType, attaches );
18387				}
18388			} else {
18389
18390				// Return false to indicate standard teardown should be applied
18391				return false;
18392			}
18393		},
18394
18395		// Suppress native focus or blur if we're currently inside
18396		// a leveraged native-event stack
18397		_default: function( event ) {
18398			return dataPriv.get( event.target, type );
18399		},
18400
18401		delegateType: delegateType
18402	};
18403
18404	// Support: Firefox <=44
18405	// Firefox doesn't have focus(in | out) events
18406	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
18407	//
18408	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
18409	// focus(in | out) events fire after focus & blur events,
18410	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
18411	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
18412	//
18413	// Support: IE 9 - 11+
18414	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
18415	// attach a single handler for both events in IE.
18416	jQuery.event.special[ delegateType ] = {
18417		setup: function() {
18418
18419			// Handle: regular nodes (via `this.ownerDocument`), window
18420			// (via `this.document`) & document (via `this`).
18421			var doc = this.ownerDocument || this.document || this,
18422				dataHolder = document.documentMode ? this : doc,
18423				attaches = dataPriv.get( dataHolder, delegateType );
18424
18425			// Support: IE 9 - 11+
18426			// We use the same native handler for focusin & focus (and focusout & blur)
18427			// so we need to coordinate setup & teardown parts between those events.
18428			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
18429			if ( !attaches ) {
18430				if ( document.documentMode ) {
18431					this.addEventListener( delegateType, focusMappedHandler );
18432				} else {
18433					doc.addEventListener( type, focusMappedHandler, true );
18434				}
18435			}
18436			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
18437		},
18438		teardown: function() {
18439			var doc = this.ownerDocument || this.document || this,
18440				dataHolder = document.documentMode ? this : doc,
18441				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
18442
18443			if ( !attaches ) {
18444				if ( document.documentMode ) {
18445					this.removeEventListener( delegateType, focusMappedHandler );
18446				} else {
18447					doc.removeEventListener( type, focusMappedHandler, true );
18448				}
18449				dataPriv.remove( dataHolder, delegateType );
18450			} else {
18451				dataPriv.set( dataHolder, delegateType, attaches );
18452			}
18453		}
18454	};
18455} );
18456
18457// Create mouseenter/leave events using mouseover/out and event-time checks
18458// so that event delegation works in jQuery.
18459// Do the same for pointerenter/pointerleave and pointerover/pointerout
18460//
18461// Support: Safari 7 only
18462// Safari sends mouseenter too often; see:
18463// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
18464// for the description of the bug (it existed in older Chrome versions as well).
18465jQuery.each( {
18466	mouseenter: "mouseover",
18467	mouseleave: "mouseout",
18468	pointerenter: "pointerover",
18469	pointerleave: "pointerout"
18470}, function( orig, fix ) {
18471	jQuery.event.special[ orig ] = {
18472		delegateType: fix,
18473		bindType: fix,
18474
18475		handle: function( event ) {
18476			var ret,
18477				target = this,
18478				related = event.relatedTarget,
18479				handleObj = event.handleObj;
18480
18481			// For mouseenter/leave call the handler if related is outside the target.
18482			// NB: No relatedTarget if the mouse left/entered the browser window
18483			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
18484				event.type = handleObj.origType;
18485				ret = handleObj.handler.apply( this, arguments );
18486				event.type = fix;
18487			}
18488			return ret;
18489		}
18490	};
18491} );
18492
18493jQuery.fn.extend( {
18494
18495	on: function( types, selector, data, fn ) {
18496		return on( this, types, selector, data, fn );
18497	},
18498	one: function( types, selector, data, fn ) {
18499		return on( this, types, selector, data, fn, 1 );
18500	},
18501	off: function( types, selector, fn ) {
18502		var handleObj, type;
18503		if ( types && types.preventDefault && types.handleObj ) {
18504
18505			// ( event )  dispatched jQuery.Event
18506			handleObj = types.handleObj;
18507			jQuery( types.delegateTarget ).off(
18508				handleObj.namespace ?
18509					handleObj.origType + "." + handleObj.namespace :
18510					handleObj.origType,
18511				handleObj.selector,
18512				handleObj.handler
18513			);
18514			return this;
18515		}
18516		if ( typeof types === "object" ) {
18517
18518			// ( types-object [, selector] )
18519			for ( type in types ) {
18520				this.off( type, selector, types[ type ] );
18521			}
18522			return this;
18523		}
18524		if ( selector === false || typeof selector === "function" ) {
18525
18526			// ( types [, fn] )
18527			fn = selector;
18528			selector = undefined;
18529		}
18530		if ( fn === false ) {
18531			fn = returnFalse;
18532		}
18533		return this.each( function() {
18534			jQuery.event.remove( this, types, fn, selector );
18535		} );
18536	}
18537} );
18538
18539
18540var
18541
18542	// Support: IE <=10 - 11, Edge 12 - 13 only
18543	// In IE/Edge using regex groups here causes severe slowdowns.
18544	// See https://connect.microsoft.com/IE/feedback/details/1736512/
18545	rnoInnerhtml = /<script|<style|<link/i,
18546
18547	// checked="checked" or checked
18548	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
18549
18550	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
18551
18552// Prefer a tbody over its parent table for containing new rows
18553function manipulationTarget( elem, content ) {
18554	if ( nodeName( elem, "table" ) &&
18555		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
18556
18557		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
18558	}
18559
18560	return elem;
18561}
18562
18563// Replace/restore the type attribute of script elements for safe DOM manipulation
18564function disableScript( elem ) {
18565	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
18566	return elem;
18567}
18568function restoreScript( elem ) {
18569	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
18570		elem.type = elem.type.slice( 5 );
18571	} else {
18572		elem.removeAttribute( "type" );
18573	}
18574
18575	return elem;
18576}
18577
18578function cloneCopyEvent( src, dest ) {
18579	var i, l, type, pdataOld, udataOld, udataCur, events;
18580
18581	if ( dest.nodeType !== 1 ) {
18582		return;
18583	}
18584
18585	// 1. Copy private data: events, handlers, etc.
18586	if ( dataPriv.hasData( src ) ) {
18587		pdataOld = dataPriv.get( src );
18588		events = pdataOld.events;
18589
18590		if ( events ) {
18591			dataPriv.remove( dest, "handle events" );
18592
18593			for ( type in events ) {
18594				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
18595					jQuery.event.add( dest, type, events[ type ][ i ] );
18596				}
18597			}
18598		}
18599	}
18600
18601	// 2. Copy user data
18602	if ( dataUser.hasData( src ) ) {
18603		udataOld = dataUser.access( src );
18604		udataCur = jQuery.extend( {}, udataOld );
18605
18606		dataUser.set( dest, udataCur );
18607	}
18608}
18609
18610// Fix IE bugs, see support tests
18611function fixInput( src, dest ) {
18612	var nodeName = dest.nodeName.toLowerCase();
18613
18614	// Fails to persist the checked state of a cloned checkbox or radio button.
18615	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
18616		dest.checked = src.checked;
18617
18618	// Fails to return the selected option to the default selected state when cloning options
18619	} else if ( nodeName === "input" || nodeName === "textarea" ) {
18620		dest.defaultValue = src.defaultValue;
18621	}
18622}
18623
18624function domManip( collection, args, callback, ignored ) {
18625
18626	// Flatten any nested arrays
18627	args = flat( args );
18628
18629	var fragment, first, scripts, hasScripts, node, doc,
18630		i = 0,
18631		l = collection.length,
18632		iNoClone = l - 1,
18633		value = args[ 0 ],
18634		valueIsFunction = isFunction( value );
18635
18636	// We can't cloneNode fragments that contain checked, in WebKit
18637	if ( valueIsFunction ||
18638			( l > 1 && typeof value === "string" &&
18639				!support.checkClone && rchecked.test( value ) ) ) {
18640		return collection.each( function( index ) {
18641			var self = collection.eq( index );
18642			if ( valueIsFunction ) {
18643				args[ 0 ] = value.call( this, index, self.html() );
18644			}
18645			domManip( self, args, callback, ignored );
18646		} );
18647	}
18648
18649	if ( l ) {
18650		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
18651		first = fragment.firstChild;
18652
18653		if ( fragment.childNodes.length === 1 ) {
18654			fragment = first;
18655		}
18656
18657		// Require either new content or an interest in ignored elements to invoke the callback
18658		if ( first || ignored ) {
18659			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
18660			hasScripts = scripts.length;
18661
18662			// Use the original fragment for the last item
18663			// instead of the first because it can end up
18664			// being emptied incorrectly in certain situations (trac-8070).
18665			for ( ; i < l; i++ ) {
18666				node = fragment;
18667
18668				if ( i !== iNoClone ) {
18669					node = jQuery.clone( node, true, true );
18670
18671					// Keep references to cloned scripts for later restoration
18672					if ( hasScripts ) {
18673
18674						// Support: Android <=4.0 only, PhantomJS 1 only
18675						// push.apply(_, arraylike) throws on ancient WebKit
18676						jQuery.merge( scripts, getAll( node, "script" ) );
18677					}
18678				}
18679
18680				callback.call( collection[ i ], node, i );
18681			}
18682
18683			if ( hasScripts ) {
18684				doc = scripts[ scripts.length - 1 ].ownerDocument;
18685
18686				// Re
vendor: 2,059 bytes, lines 18686-18758
18686enable scripts
18687				jQuery.map( scripts, restoreScript );
18688
18689				// Evaluate executable scripts on first document insertion
18690				for ( i = 0; i < hasScripts; i++ ) {
18691					node = scripts[ i ];
18692					if ( rscriptType.test( node.type || "" ) &&
18693						!dataPriv.access( node, "globalEval" ) &&
18694						jQuery.contains( doc, node ) ) {
18695
18696						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
18697
18698							// Optional AJAX dependency, but won't run scripts if not present
18699							if ( jQuery._evalUrl && !node.noModule ) {
18700								jQuery._evalUrl( node.src, {
18701									nonce: node.nonce || node.getAttribute( "nonce" )
18702								}, doc );
18703							}
18704						} else {
18705
18706							// Unwrap a CDATA section containing script contents. This shouldn't be
18707							// needed as in XML documents they're already not visible when
18708							// inspecting element contents and in HTML documents they have no
18709							// meaning but we're preserving that logic for backwards compatibility.
18710							// This will be removed completely in 4.0. See gh-4904.
18711							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
18712						}
18713					}
18714				}
18715			}
18716		}
18717	}
18718
18719	return collection;
18720}
18721
18722function remove( elem, selector, keepData ) {
18723	var node,
18724		nodes = selector ? jQuery.filter( selector, elem ) : elem,
18725		i = 0;
18726
18727	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
18728		if ( !keepData && node.nodeType === 1 ) {
18729			jQuery.cleanData( getAll( node ) );
18730		}
18731
18732		if ( node.parentNode ) {
18733			if ( keepData && isAttached( node ) ) {
18734				setGlobalEval( getAll( node, "script" ) );
18735			}
18736			node.parentNode.removeChild( node );
18737		}
18738	}
18739
18740	return elem;
18741}
18742
18743jQuery.extend( {
18744	htmlPrefilter: function( html ) {
18745		return html;
18746	},
18747
18748	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
18749		var i, l, srcElements, destElements,
18750			clone = elem.cloneNode( true ),
18751			inPage = isAttached( elem );
18752
18753		// Fix IE cloning issues
18754		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
18755				!jQuery.isXMLDoc( elem ) ) {
18756
18757			// We eschew jQuery#find here for performance reasons:
18758			//
vendor: 2,516 bytes, lines 18758-18855
18758 https://jsperf.com/getall-vs-sizzle/2
18759			destElements = getAll( clone );
18760			srcElements = getAll( elem );
18761
18762			for ( i = 0, l = srcElements.length; i < l; i++ ) {
18763				fixInput( srcElements[ i ], destElements[ i ] );
18764			}
18765		}
18766
18767		// Copy the events from the original to the clone
18768		if ( dataAndEvents ) {
18769			if ( deepDataAndEvents ) {
18770				srcElements = srcElements || getAll( elem );
18771				destElements = destElements || getAll( clone );
18772
18773				for ( i = 0, l = srcElements.length; i < l; i++ ) {
18774					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
18775				}
18776			} else {
18777				cloneCopyEvent( elem, clone );
18778			}
18779		}
18780
18781		// Preserve script evaluation history
18782		destElements = getAll( clone, "script" );
18783		if ( destElements.length > 0 ) {
18784			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
18785		}
18786
18787		// Return the cloned set
18788		return clone;
18789	},
18790
18791	cleanData: function( elems ) {
18792		var data, elem, type,
18793			special = jQuery.event.special,
18794			i = 0;
18795
18796		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
18797			if ( acceptData( elem ) ) {
18798				if ( ( data = elem[ dataPriv.expando ] ) ) {
18799					if ( data.events ) {
18800						for ( type in data.events ) {
18801							if ( special[ type ] ) {
18802								jQuery.event.remove( elem, type );
18803
18804							// This is a shortcut to avoid jQuery.event.remove's overhead
18805							} else {
18806								jQuery.removeEvent( elem, type, data.handle );
18807							}
18808						}
18809					}
18810
18811					// Support: Chrome <=35 - 45+
18812					// Assign undefined instead of using delete, see Data#remove
18813					elem[ dataPriv.expando ] = undefined;
18814				}
18815				if ( elem[ dataUser.expando ] ) {
18816
18817					// Support: Chrome <=35 - 45+
18818					// Assign undefined instead of using delete, see Data#remove
18819					elem[ dataUser.expando ] = undefined;
18820				}
18821			}
18822		}
18823	}
18824} );
18825
18826jQuery.fn.extend( {
18827	detach: function( selector ) {
18828		return remove( this, selector, true );
18829	},
18830
18831	remove: function( selector ) {
18832		return remove( this, selector );
18833	},
18834
18835	text: function( value ) {
18836		return access( this, function( value ) {
18837			return value === undefined ?
18838				jQuery.text( this ) :
18839				this.empty().each( function() {
18840					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
18841						this.textContent = value;
18842					}
18843				} );
18844		}, null, value, arguments.length );
18845	},
18846
18847	append: function() {
18848		return domManip( this, arguments, function( elem ) {
18849			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
18850				var target = manipulationTarget( this, elem );
18851				target.appendChild( elem );
18852			}
18853		} );
18854	},
18855
vendor: 7,872 bytes, lines 18856-19143
18856	prepend: function() {
18857		return domManip( this, arguments, function( elem ) {
18858			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
18859				var target = manipulationTarget( this, elem );
18860				target.insertBefore( elem, target.firstChild );
18861			}
18862		} );
18863	},
18864
18865	before: function() {
18866		return domManip( this, arguments, function( elem ) {
18867			if ( this.parentNode ) {
18868				this.parentNode.insertBefore( elem, this );
18869			}
18870		} );
18871	},
18872
18873	after: function() {
18874		return domManip( this, arguments, function( elem ) {
18875			if ( this.parentNode ) {
18876				this.parentNode.insertBefore( elem, this.nextSibling );
18877			}
18878		} );
18879	},
18880
18881	empty: function() {
18882		var elem,
18883			i = 0;
18884
18885		for ( ; ( elem = this[ i ] ) != null; i++ ) {
18886			if ( elem.nodeType === 1 ) {
18887
18888				// Prevent memory leaks
18889				jQuery.cleanData( getAll( elem, false ) );
18890
18891				// Remove any remaining nodes
18892				elem.textContent = "";
18893			}
18894		}
18895
18896		return this;
18897	},
18898
18899	clone: function( dataAndEvents, deepDataAndEvents ) {
18900		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
18901		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
18902
18903		return this.map( function() {
18904			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
18905		} );
18906	},
18907
18908	html: function( value ) {
18909		return access( this, function( value ) {
18910			var elem = this[ 0 ] || {},
18911				i = 0,
18912				l = this.length;
18913
18914			if ( value === undefined && elem.nodeType === 1 ) {
18915				return elem.innerHTML;
18916			}
18917
18918			// See if we can take a shortcut and just use innerHTML
18919			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
18920				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
18921
18922				value = jQuery.htmlPrefilter( value );
18923
18924				try {
18925					for ( ; i < l; i++ ) {
18926						elem = this[ i ] || {};
18927
18928						// Remove element nodes and prevent memory leaks
18929						if ( elem.nodeType === 1 ) {
18930							jQuery.cleanData( getAll( elem, false ) );
18931							elem.innerHTML = value;
18932						}
18933					}
18934
18935					elem = 0;
18936
18937				// If using innerHTML throws an exception, use the fallback method
18938				} catch ( e ) {}
18939			}
18940
18941			if ( elem ) {
18942				this.empty().append( value );
18943			}
18944		}, null, value, arguments.length );
18945	},
18946
18947	replaceWith: function() {
18948		var ignored = [];
18949
18950		// Make the changes, replacing each non-ignored context element with the new content
18951		return domManip( this, arguments, function( elem ) {
18952			var parent = this.parentNode;
18953
18954			if ( jQuery.inArray( this, ignored ) < 0 ) {
18955				jQuery.cleanData( getAll( this ) );
18956				if ( parent ) {
18957					parent.replaceChild( elem, this );
18958				}
18959			}
18960
18961		// Force callback invocation
18962		}, ignored );
18963	}
18964} );
18965
18966jQuery.each( {
18967	appendTo: "append",
18968	prependTo: "prepend",
18969	insertBefore: "before",
18970	insertAfter: "after",
18971	replaceAll: "replaceWith"
18972}, function( name, original ) {
18973	jQuery.fn[ name ] = function( selector ) {
18974		var elems,
18975			ret = [],
18976			insert = jQuery( selector ),
18977			last = insert.length - 1,
18978			i = 0;
18979
18980		for ( ; i <= last; i++ ) {
18981			elems = i === last ? this : this.clone( true );
18982			jQuery( insert[ i ] )[ original ]( elems );
18983
18984			// Support: Android <=4.0 only, PhantomJS 1 only
18985			// .get() because push.apply(_, arraylike) throws on ancient WebKit
18986			push.apply( ret, elems.get() );
18987		}
18988
18989		return this.pushStack( ret );
18990	};
18991} );
18992var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
18993
18994var rcustomProp = /^--/;
18995
18996
18997var getStyles = function( elem ) {
18998
18999		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
19000		// IE throws on elements created in popups
19001		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
19002		var view = elem.ownerDocument.defaultView;
19003
19004		if ( !view || !view.opener ) {
19005			view = window;
19006		}
19007
19008		return view.getComputedStyle( elem );
19009	};
19010
19011var swap = function( elem, options, callback ) {
19012	var ret, name,
19013		old = {};
19014
19015	// Remember the old values, and insert the new ones
19016	for ( name in options ) {
19017		old[ name ] = elem.style[ name ];
19018		elem.style[ name ] = options[ name ];
19019	}
19020
19021	ret = callback.call( elem );
19022
19023	// Revert the old values
19024	for ( name in options ) {
19025		elem.style[ name ] = old[ name ];
19026	}
19027
19028	return ret;
19029};
19030
19031
19032var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
19033
19034
19035
19036( function() {
19037
19038	// Executing both pixelPosition & boxSizingReliable tests require only one layout
19039	// so they're executed at the same time to save the second computation.
19040	function computeStyleTests() {
19041
19042		// This is a singleton, we need to execute it only once
19043		if ( !div ) {
19044			return;
19045		}
19046
19047		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
19048			"margin-top:1px;padding:0;border:0";
19049		div.style.cssText =
19050			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
19051			"margin:auto;border:1px;padding:1px;" +
19052			"width:60%;top:1%";
19053		documentElement.appendChild( container ).appendChild( div );
19054
19055		var divStyle = window.getComputedStyle( div );
19056		pixelPositionVal = divStyle.top !== "1%";
19057
19058		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
19059		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
19060
19061		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
19062		// Some styles come back with percentage values, even though they shouldn't
19063		div.style.right = "60%";
19064		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
19065
19066		// Support: IE 9 - 11 only
19067		// Detect misreporting of content dimensions for box-sizing:border-box elements
19068		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
19069
19070		// Support: IE 9 only
19071		// Detect overflow:scroll screwiness (gh-3699)
19072		// Support: Chrome <=64
19073		// Don't get tricked when zoom affects offsetWidth (gh-4029)
19074		div.style.position = "absolute";
19075		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
19076
19077		documentElement.removeChild( container );
19078
19079		// Nullify the div so it wouldn't be stored in the memory and
19080		// it will also be a sign that checks already performed
19081		div = null;
19082	}
19083
19084	function roundPixelMeasures( measure ) {
19085		return Math.round( parseFloat( measure ) );
19086	}
19087
19088	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
19089		reliableTrDimensionsVal, reliableMarginLeftVal,
19090		container = document.createElement( "div" ),
19091		div = document.createElement( "div" );
19092
19093	// Finish early in limited (non-browser) environments
19094	if ( !div.style ) {
19095		return;
19096	}
19097
19098	// Support: IE <=9 - 11 only
19099	// Style of cloned element affects source element cloned (trac-8908)
19100	div.style.backgroundClip = "content-box";
19101	div.cloneNode( true ).style.backgroundClip = "";
19102	support.clearCloneStyle = div.style.backgroundClip === "content-box";
19103
19104	jQuery.extend( support, {
19105		boxSizingReliable: function() {
19106			computeStyleTests();
19107			return boxSizingReliableVal;
19108		},
19109		pixelBoxStyles: function() {
19110			computeStyleTests();
19111			return pixelBoxStylesVal;
19112		},
19113		pixelPosition: function() {
19114			computeStyleTests();
19115			return pixelPositionVal;
19116		},
19117		reliableMarginLeft: function() {
19118			computeStyleTests();
19119			return reliableMarginLeftVal;
19120		},
19121		scrollboxSize: function() {
19122			computeStyleTests();
19123			return scrollboxSizeVal;
19124		},
19125
19126		// Support: IE 9 - 11+, Edge 15 - 18+
19127		// IE/Edge misreport `getComputedStyle` of table rows with width/height
19128		// set in CSS while `offset*` properties report correct values.
19129		// Behavior in IE 9 is more subtle than in newer versions & it passes
19130		// some versions of this test; make sure not to make it pass there!
19131		//
19132		// Support: Firefox 70+
19133		// Only Firefox includes border widths
19134		// in computed dimensions. (gh-4529)
19135		reliableTrDimensions: function() {
19136			var table, tr, trChild, trStyle;
19137			if ( reliableTrDimensionsVal == null ) {
19138				table = document.createElement( "table" );
19139				tr = document.createElement( "tr" );
19140				trChild = document.createElement( "div" );
19141
19142				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
19143				tr.style.cssText = "bo
19143rder:1px solid";
19144
19145				// Support: Chrome 86+
19146				// Height set through cssText does not get applied.
19147				// Computed height then comes back as 0.
19148				tr.style.height = "1px";
19149				trChild.style.height = "9px";
19150
19151				// Support: Android 8 Chrome 86+
19152				// In our bodyBackground.html iframe,
19153				// display for all div elements is set to "inline",
19154				// which causes a problem only in Android 8 Chrome 86.
19155				// Ensuring the div is display: block
vendor: 50,104 bytes, lines 19155-21070
19155
19156				// gets around this issue.
19157				trChild.style.display = "block";
19158
19159				documentElement
19160					.appendChild( table )
19161					.appendChild( tr )
19162					.appendChild( trChild );
19163
19164				trStyle = window.getComputedStyle( tr );
19165				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
19166					parseInt( trStyle.borderTopWidth, 10 ) +
19167					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
19168
19169				documentElement.removeChild( table );
19170			}
19171			return reliableTrDimensionsVal;
19172		}
19173	} );
19174} )();
19175
19176
19177function curCSS( elem, name, computed ) {
19178	var width, minWidth, maxWidth, ret,
19179		isCustomProp = rcustomProp.test( name ),
19180
19181		// Support: Firefox 51+
19182		// Retrieving style before computed somehow
19183		// fixes an issue with getting wrong values
19184		// on detached elements
19185		style = elem.style;
19186
19187	computed = computed || getStyles( elem );
19188
19189	// getPropertyValue is needed for:
19190	//   .css('filter') (IE 9 only, trac-12537)
19191	//   .css('--customProperty) (gh-3144)
19192	if ( computed ) {
19193
19194		// Support: IE <=9 - 11+
19195		// IE only supports `"float"` in `getPropertyValue`; in computed styles
19196		// it's only available as `"cssFloat"`. We no longer modify properties
19197		// sent to `.css()` apart from camelCasing, so we need to check both.
19198		// Normally, this would create difference in behavior: if
19199		// `getPropertyValue` returns an empty string, the value returned
19200		// by `.css()` would be `undefined`. This is usually the case for
19201		// disconnected elements. However, in IE even disconnected elements
19202		// with no styles return `"none"` for `getPropertyValue( "float" )`
19203		ret = computed.getPropertyValue( name ) || computed[ name ];
19204
19205		if ( isCustomProp && ret ) {
19206
19207			// Support: Firefox 105+, Chrome <=105+
19208			// Spec requires trimming whitespace for custom properties (gh-4926).
19209			// Firefox only trims leading whitespace. Chrome just collapses
19210			// both leading & trailing whitespace to a single space.
19211			//
19212			// Fall back to `undefined` if empty string returned.
19213			// This collapses a missing definition with property defined
19214			// and set to an empty string but there's no standard API
19215			// allowing us to differentiate them without a performance penalty
19216			// and returning `undefined` aligns with older jQuery.
19217			//
19218			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
19219			// as whitespace while CSS does not, but this is not a problem
19220			// because CSS preprocessing replaces them with U+000A LINE FEED
19221			// (which *is* CSS whitespace)
19222			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
19223			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
19224		}
19225
19226		if ( ret === "" && !isAttached( elem ) ) {
19227			ret = jQuery.style( elem, name );
19228		}
19229
19230		// A tribute to the "awesome hack by Dean Edwards"
19231		// Android Browser returns percentage for some values,
19232		// but width seems to be reliably pixels.
19233		// This is against the CSSOM draft spec:
19234		// https://drafts.csswg.org/cssom/#resolved-values
19235		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
19236
19237			// Remember the original values
19238			width = style.width;
19239			minWidth = style.minWidth;
19240			maxWidth = style.maxWidth;
19241
19242			// Put in the new values to get a computed value out
19243			style.minWidth = style.maxWidth = style.width = ret;
19244			ret = computed.width;
19245
19246			// Revert the changed values
19247			style.width = width;
19248			style.minWidth = minWidth;
19249			style.maxWidth = maxWidth;
19250		}
19251	}
19252
19253	return ret !== undefined ?
19254
19255		// Support: IE <=9 - 11 only
19256		// IE returns zIndex value as an integer.
19257		ret + "" :
19258		ret;
19259}
19260
19261
19262function addGetHookIf( conditionFn, hookFn ) {
19263
19264	// Define the hook, we'll check on the first run if it's really needed.
19265	return {
19266		get: function() {
19267			if ( conditionFn() ) {
19268
19269				// Hook not needed (or it's not possible to use it due
19270				// to missing dependency), remove it.
19271				delete this.get;
19272				return;
19273			}
19274
19275			// Hook needed; redefine it so that the support test is not executed again.
19276			return ( this.get = hookFn ).apply( this, arguments );
19277		}
19278	};
19279}
19280
19281
19282var cssPrefixes = [ "Webkit", "Moz", "ms" ],
19283	emptyStyle = document.createElement( "div" ).style,
19284	vendorProps = {};
19285
19286// Return a vendor-prefixed property or undefined
19287function vendorPropName( name ) {
19288
19289	// Check for vendor prefixed names
19290	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
19291		i = cssPrefixes.length;
19292
19293	while ( i-- ) {
19294		name = cssPrefixes[ i ] + capName;
19295		if ( name in emptyStyle ) {
19296			return name;
19297		}
19298	}
19299}
19300
19301// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
19302function finalPropName( name ) {
19303	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
19304
19305	if ( final ) {
19306		return final;
19307	}
19308	if ( name in emptyStyle ) {
19309		return name;
19310	}
19311	return vendorProps[ name ] = vendorPropName( name ) || name;
19312}
19313
19314
19315var
19316
19317	// Swappable if display is none or starts with table
19318	// except "table", "table-cell", or "table-caption"
19319	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
19320	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
19321	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
19322	cssNormalTransform = {
19323		letterSpacing: "0",
19324		fontWeight: "400"
19325	};
19326
19327function setPositiveNumber( _elem, value, subtract ) {
19328
19329	// Any relative (+/-) values have already been
19330	// normalized at this point
19331	var matches = rcssNum.exec( value );
19332	return matches ?
19333
19334		// Guard against undefined "subtract", e.g., when used as in cssHooks
19335		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
19336		value;
19337}
19338
19339function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
19340	var i = dimension === "width" ? 1 : 0,
19341		extra = 0,
19342		delta = 0,
19343		marginDelta = 0;
19344
19345	// Adjustment may not be necessary
19346	if ( box === ( isBorderBox ? "border" : "content" ) ) {
19347		return 0;
19348	}
19349
19350	for ( ; i < 4; i += 2 ) {
19351
19352		// Both box models exclude margin
19353		// Count margin delta separately to only add it after scroll gutter adjustment.
19354		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
19355		if ( box === "margin" ) {
19356			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
19357		}
19358
19359		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
19360		if ( !isBorderBox ) {
19361
19362			// Add padding
19363			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
19364
19365			// For "border" or "margin", add border
19366			if ( box !== "padding" ) {
19367				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
19368
19369			// But still keep track of it otherwise
19370			} else {
19371				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
19372			}
19373
19374		// If we get here with a border-box (content + padding + border), we're seeking "content" or
19375		// "padding" or "margin"
19376		} else {
19377
19378			// For "content", subtract padding
19379			if ( box === "content" ) {
19380				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
19381			}
19382
19383			// For "content" or "padding", subtract border
19384			if ( box !== "margin" ) {
19385				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
19386			}
19387		}
19388	}
19389
19390	// Account for positive content-box scroll gutter when requested by providing computedVal
19391	if ( !isBorderBox && computedVal >= 0 ) {
19392
19393		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
19394		// Assuming integer scroll gutter, subtract the rest and round down
19395		delta += Math.max( 0, Math.ceil(
19396			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
19397			computedVal -
19398			delta -
19399			extra -
19400			0.5
19401
19402		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
19403		// Use an explicit zero to avoid NaN (gh-3964)
19404		) ) || 0;
19405	}
19406
19407	return delta + marginDelta;
19408}
19409
19410function getWidthOrHeight( elem, dimension, extra ) {
19411
19412	// Start with computed style
19413	var styles = getStyles( elem ),
19414
19415		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
19416		// Fake content-box until we know it's needed to know the true value.
19417		boxSizingNeeded = !support.boxSizingReliable() || extra,
19418		isBorderBox = boxSizingNeeded &&
19419			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
19420		valueIsBorderBox = isBorderBox,
19421
19422		val = curCSS( elem, dimension, styles ),
19423		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
19424
19425	// Support: Firefox <=54
19426	// Return a confounding non-pixel value or feign ignorance, as appropriate.
19427	if ( rnumnonpx.test( val ) ) {
19428		if ( !extra ) {
19429			return val;
19430		}
19431		val = "auto";
19432	}
19433
19434
19435	// Support: IE 9 - 11 only
19436	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
19437	// In those cases, the computed value can be trusted to be border-box.
19438	if ( ( !support.boxSizingReliable() && isBorderBox ||
19439
19440		// Support: IE 10 - 11+, Edge 15 - 18+
19441		// IE/Edge misreport `getComputedStyle` of table rows with width/height
19442		// set in CSS while `offset*` properties report correct values.
19443		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
19444		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
19445
19446		// Fall back to offsetWidth/offsetHeight when value is "auto"
19447		// This happens for inline elements with no explicit setting (gh-3571)
19448		val === "auto" ||
19449
19450		// Support: Android <=4.1 - 4.3 only
19451		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
19452		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
19453
19454		// Make sure the element is visible & connected
19455		elem.getClientRects().length ) {
19456
19457		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
19458
19459		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
19460		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
19461		// retrieved value as a content box dimension.
19462		valueIsBorderBox = offsetProp in elem;
19463		if ( valueIsBorderBox ) {
19464			val = elem[ offsetProp ];
19465		}
19466	}
19467
19468	// Normalize "" and auto
19469	val = parseFloat( val ) || 0;
19470
19471	// Adjust for the element's box model
19472	return ( val +
19473		boxModelAdjustment(
19474			elem,
19475			dimension,
19476			extra || ( isBorderBox ? "border" : "content" ),
19477			valueIsBorderBox,
19478			styles,
19479
19480			// Provide the current computed size to request scroll gutter calculation (gh-3589)
19481			val
19482		)
19483	) + "px";
19484}
19485
19486jQuery.extend( {
19487
19488	// Add in style property hooks for overriding the default
19489	// behavior of getting and setting a style property
19490	cssHooks: {
19491		opacity: {
19492			get: function( elem, computed ) {
19493				if ( computed ) {
19494
19495					// We should always get a number back from opacity
19496					var ret = curCSS( elem, "opacity" );
19497					return ret === "" ? "1" : ret;
19498				}
19499			}
19500		}
19501	},
19502
19503	// Don't automatically add "px" to these possibly-unitless properties
19504	cssNumber: {
19505		animationIterationCount: true,
19506		aspectRatio: true,
19507		borderImageSlice: true,
19508		columnCount: true,
19509		flexGrow: true,
19510		flexShrink: true,
19511		fontWeight: true,
19512		gridArea: true,
19513		gridColumn: true,
19514		gridColumnEnd: true,
19515		gridColumnStart: true,
19516		gridRow: true,
19517		gridRowEnd: true,
19518		gridRowStart: true,
19519		lineHeight: true,
19520		opacity: true,
19521		order: true,
19522		orphans: true,
19523		scale: true,
19524		widows: true,
19525		zIndex: true,
19526		zoom: true,
19527
19528		// SVG-related
19529		fillOpacity: true,
19530		floodOpacity: true,
19531		stopOpacity: true,
19532		strokeMiterlimit: true,
19533		strokeOpacity: true
19534	},
19535
19536	// Add in properties whose names you wish to fix before
19537	// setting or getting the value
19538	cssProps: {},
19539
19540	// Get and set the style property on a DOM Node
19541	style: function( elem, name, value, extra ) {
19542
19543		// Don't set styles on text and comment nodes
19544		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
19545			return;
19546		}
19547
19548		// Make sure that we're working with the right name
19549		var ret, type, hooks,
19550			origName = camelCase( name ),
19551			isCustomProp = rcustomProp.test( name ),
19552			style = elem.style;
19553
19554		// Make sure that we're working with the right name. We don't
19555		// want to query the value if it is a CSS custom property
19556		// since they are user-defined.
19557		if ( !isCustomProp ) {
19558			name = finalPropName( origName );
19559		}
19560
19561		// Gets hook for the prefixed version, then unprefixed version
19562		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
19563
19564		// Check if we're setting a value
19565		if ( value !== undefined ) {
19566			type = typeof value;
19567
19568			// Convert "+=" or "-=" to relative numbers (trac-7345)
19569			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
19570				value = adjustCSS( elem, name, ret );
19571
19572				// Fixes bug trac-9237
19573				type = "number";
19574			}
19575
19576			// Make sure that null and NaN values aren't set (trac-7116)
19577			if ( value == null || value !== value ) {
19578				return;
19579			}
19580
19581			// If a number was passed in, add the unit (except for certain CSS properties)
19582			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
19583			// "px" to a few hardcoded values.
19584			if ( type === "number" && !isCustomProp ) {
19585				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
19586			}
19587
19588			// background-* props affect original clone's values
19589			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
19590				style[ name ] = "inherit";
19591			}
19592
19593			// If a hook was provided, use that value, otherwise just set the specified value
19594			if ( !hooks || !( "set" in hooks ) ||
19595				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
19596
19597				if ( isCustomProp ) {
19598					style.setProperty( name, value );
19599				} else {
19600					style[ name ] = value;
19601				}
19602			}
19603
19604		} else {
19605
19606			// If a hook was provided get the non-computed value from there
19607			if ( hooks && "get" in hooks &&
19608				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
19609
19610				return ret;
19611			}
19612
19613			// Otherwise just get the value from the style object
19614			return style[ name ];
19615		}
19616	},
19617
19618	css: function( elem, name, extra, styles ) {
19619		var val, num, hooks,
19620			origName = camelCase( name ),
19621			isCustomProp = rcustomProp.test( name );
19622
19623		// Make sure that we're working with the right name. We don't
19624		// want to modify the value if it is a CSS custom property
19625		// since they are user-defined.
19626		if ( !isCustomProp ) {
19627			name = finalPropName( origName );
19628		}
19629
19630		// Try prefixed name followed by the unprefixed name
19631		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
19632
19633		// If a hook was provided get the computed value from there
19634		if ( hooks && "get" in hooks ) {
19635			val = hooks.get( elem, true, extra );
19636		}
19637
19638		// Otherwise, if a way to get the computed value exists, use that
19639		if ( val === undefined ) {
19640			val = curCSS( elem, name, styles );
19641		}
19642
19643		// Convert "normal" to computed value
19644		if ( val === "normal" && name in cssNormalTransform ) {
19645			val = cssNormalTransform[ name ];
19646		}
19647
19648		// Make numeric if forced or a qualifier was provided and val looks numeric
19649		if ( extra === "" || extra ) {
19650			num = parseFloat( val );
19651			return extra === true || isFinite( num ) ? num || 0 : val;
19652		}
19653
19654		return val;
19655	}
19656} );
19657
19658jQuery.each( [ "height", "width" ], function( _i, dimension ) {
19659	jQuery.cssHooks[ dimension ] = {
19660		get: function( elem, computed, extra ) {
19661			if ( computed ) {
19662
19663				// Certain elements can have dimension info if we invisibly show them
19664				// but it must have a current display style that would benefit
19665				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
19666
19667					// Support: Safari 8+
19668					// Table columns in Safari have non-zero offsetWidth & zero
19669					// getBoundingClientRect().width unless display is changed.
19670					// Support: IE <=11 only
19671					// Running getBoundingClientRect on a disconnected node
19672					// in IE throws an error.
19673					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
19674					swap( elem, cssShow, function() {
19675						return getWidthOrHeight( elem, dimension, extra );
19676					} ) :
19677					getWidthOrHeight( elem, dimension, extra );
19678			}
19679		},
19680
19681		set: function( elem, value, extra ) {
19682			var matches,
19683				styles = getStyles( elem ),
19684
19685				// Only read styles.position if the test has a chance to fail
19686				// to avoid forcing a reflow.
19687				scrollboxSizeBuggy = !support.scrollboxSize() &&
19688					styles.position === "absolute",
19689
19690				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
19691				boxSizingNeeded = scrollboxSizeBuggy || extra,
19692				isBorderBox = boxSizingNeeded &&
19693					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
19694				subtract = extra ?
19695					boxModelAdjustment(
19696						elem,
19697						dimension,
19698						extra,
19699						isBorderBox,
19700						styles
19701					) :
19702					0;
19703
19704			// Account for unreliable border-box dimensions by comparing offset* to computed and
19705			// faking a content-box to get border and padding (gh-3699)
19706			if ( isBorderBox && scrollboxSizeBuggy ) {
19707				subtract -= Math.ceil(
19708					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
19709					parseFloat( styles[ dimension ] ) -
19710					boxModelAdjustment( elem, dimension, "border", false, styles ) -
19711					0.5
19712				);
19713			}
19714
19715			// Convert to pixels if value adjustment is needed
19716			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
19717				( matches[ 3 ] || "px" ) !== "px" ) {
19718
19719				elem.style[ dimension ] = value;
19720				value = jQuery.css( elem, dimension );
19721			}
19722
19723			return setPositiveNumber( elem, value, subtract );
19724		}
19725	};
19726} );
19727
19728jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
19729	function( elem, computed ) {
19730		if ( computed ) {
19731			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
19732				elem.getBoundingClientRect().left -
19733					swap( elem, { marginLeft: 0 }, function() {
19734						return elem.getBoundingClientRect().left;
19735					} )
19736			) + "px";
19737		}
19738	}
19739);
19740
19741// These hooks are used by animate to expand properties
19742jQuery.each( {
19743	margin: "",
19744	padding: "",
19745	border: "Width"
19746}, function( prefix, suffix ) {
19747	jQuery.cssHooks[ prefix + suffix ] = {
19748		expand: function( value ) {
19749			var i = 0,
19750				expanded = {},
19751
19752				// Assumes a single number if not a string
19753				parts = typeof value === "string" ? value.split( " " ) : [ value ];
19754
19755			for ( ; i < 4; i++ ) {
19756				expanded[ prefix + cssExpand[ i ] + suffix ] =
19757					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
19758			}
19759
19760			return expanded;
19761		}
19762	};
19763
19764	if ( prefix !== "margin" ) {
19765		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
19766	}
19767} );
19768
19769jQuery.fn.extend( {
19770	css: function( name, value ) {
19771		return access( this, function( elem, name, value ) {
19772			var styles, len,
19773				map = {},
19774				i = 0;
19775
19776			if ( Array.isArray( name ) ) {
19777				styles = getStyles( elem );
19778				len = name.length;
19779
19780				for ( ; i < len; i++ ) {
19781					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
19782				}
19783
19784				return map;
19785			}
19786
19787			return value !== undefined ?
19788				jQuery.style( elem, name, value ) :
19789				jQuery.css( elem, name );
19790		}, name, value, arguments.length > 1 );
19791	}
19792} );
19793
19794
19795function Tween( elem, options, prop, end, easing ) {
19796	return new Tween.prototype.init( elem, options, prop, end, easing );
19797}
19798jQuery.Tween = Tween;
19799
19800Tween.prototype = {
19801	constructor: Tween,
19802	init: function( elem, options, prop, end, easing, unit ) {
19803		this.elem = elem;
19804		this.prop = prop;
19805		this.easing = easing || jQuery.easing._default;
19806		this.options = options;
19807		this.start = this.now = this.cur();
19808		this.end = end;
19809		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
19810	},
19811	cur: function() {
19812		var hooks = Tween.propHooks[ this.prop ];
19813
19814		return hooks && hooks.get ?
19815			hooks.get( this ) :
19816			Tween.propHooks._default.get( this );
19817	},
19818	run: function( percent ) {
19819		var eased,
19820			hooks = Tween.propHooks[ this.prop ];
19821
19822		if ( this.options.duration ) {
19823			this.pos = eased = jQuery.easing[ this.easing ](
19824				percent, this.options.duration * percent, 0, 1, this.options.duration
19825			);
19826		} else {
19827			this.pos = eased = percent;
19828		}
19829		this.now = ( this.end - this.start ) * eased + this.start;
19830
19831		if ( this.options.step ) {
19832			this.options.step.call( this.elem, this.now, this );
19833		}
19834
19835		if ( hooks && hooks.set ) {
19836			hooks.set( this );
19837		} else {
19838			Tween.propHooks._default.set( this );
19839		}
19840		return this;
19841	}
19842};
19843
19844Tween.prototype.init.prototype = Tween.prototype;
19845
19846Tween.propHooks = {
19847	_default: {
19848		get: function( tween ) {
19849			var result;
19850
19851			// Use a property on the element directly when it is not a DOM element,
19852			// or when there is no matching style property that exists.
19853			if ( tween.elem.nodeType !== 1 ||
19854				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
19855				return tween.elem[ tween.prop ];
19856			}
19857
19858			// Passing an empty string as a 3rd parameter to .css will automatically
19859			// attempt a parseFloat and fallback to a string if the parse fails.
19860			// Simple values such as "10px" are parsed to Float;
19861			// complex values such as "rotate(1rad)" are returned as-is.
19862			result = jQuery.css( tween.elem, tween.prop, "" );
19863
19864			// Empty strings, null, undefined and "auto" are converted to 0.
19865			return !result || result === "auto" ? 0 : result;
19866		},
19867		set: function( tween ) {
19868
19869			// Use step hook for back compat.
19870			// Use cssHook if its there.
19871			// Use .style if available and use plain properties where available.
19872			if ( jQuery.fx.step[ tween.prop ] ) {
19873				jQuery.fx.step[ tween.prop ]( tween );
19874			} else if ( tween.elem.nodeType === 1 && (
19875				jQuery.cssHooks[ tween.prop ] ||
19876					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
19877				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
19878			} else {
19879				tween.elem[ tween.prop ] = tween.now;
19880			}
19881		}
19882	}
19883};
19884
19885// Support: IE <=9 only
19886// Panic based approach to setting things on disconnected nodes
19887Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
19888	set: function( tween ) {
19889		if ( tween.elem.nodeType && tween.elem.parentNode ) {
19890			tween.elem[ tween.prop ] = tween.now;
19891		}
19892	}
19893};
19894
19895jQuery.easing = {
19896	linear: function( p ) {
19897		return p;
19898	},
19899	swing: function( p ) {
19900		return 0.5 - Math.cos( p * Math.PI ) / 2;
19901	},
19902	_default: "swing"
19903};
19904
19905jQuery.fx = Tween.prototype.init;
19906
19907// Back compat <1.8 extension point
19908jQuery.fx.step = {};
19909
19910
19911
19912
19913var
19914	fxNow, inProgress,
19915	rfxtypes = /^(?:toggle|show|hide)$/,
19916	rrun = /queueHooks$/;
19917
19918function schedule() {
19919	if ( inProgress ) {
19920		if ( document.hidden === false && window.requestAnimationFrame ) {
19921			window.requestAnimationFrame( schedule );
19922		} else {
19923			window.setTimeout( schedule, jQuery.fx.interval );
19924		}
19925
19926		jQuery.fx.tick();
19927	}
19928}
19929
19930// Animations created synchronously will run synchronously
19931function createFxNow() {
19932	window.setTimeout( function() {
19933		fxNow = undefined;
19934	} );
19935	return ( fxNow = Date.now() );
19936}
19937
19938// Generate parameters to create a standard animation
19939function genFx( type, includeWidth ) {
19940	var which,
19941		i = 0,
19942		attrs = { height: type };
19943
19944	// If we include width, step value is 1 to do all cssExpand values,
19945	// otherwise step value is 2 to skip over Left and Right
19946	includeWidth = includeWidth ? 1 : 0;
19947	for ( ; i < 4; i += 2 - includeWidth ) {
19948		which = cssExpand[ i ];
19949		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
19950	}
19951
19952	if ( includeWidth ) {
19953		attrs.opacity = attrs.width = type;
19954	}
19955
19956	return attrs;
19957}
19958
19959function createTween( value, prop, animation ) {
19960	var tween,
19961		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
19962		index = 0,
19963		length = collection.length;
19964	for ( ; index < length; index++ ) {
19965		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
19966
19967			// We're done with this property
19968			return tween;
19969		}
19970	}
19971}
19972
19973function defaultPrefilter( elem, props, opts ) {
19974	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
19975		isBox = "width" in props || "height" in props,
19976		anim = this,
19977		orig = {},
19978		style = elem.style,
19979		hidden = elem.nodeType && isHiddenWithinTree( elem ),
19980		dataShow = dataPriv.get( elem, "fxshow" );
19981
19982	// Queue-skipping animations hijack the fx hooks
19983	if ( !opts.queue ) {
19984		hooks = jQuery._queueHooks( elem, "fx" );
19985		if ( hooks.unqueued == null ) {
19986			hooks.unqueued = 0;
19987			oldfire = hooks.empty.fire;
19988			hooks.empty.fire = function() {
19989				if ( !hooks.unqueued ) {
19990					oldfire();
19991				}
19992			};
19993		}
19994		hooks.unqueued++;
19995
19996		anim.always( function() {
19997
19998			// Ensure the complete handler is called before this completes
19999			anim.always( function() {
20000				hooks.unqueued--;
20001				if ( !jQuery.queue( elem, "fx" ).length ) {
20002					hooks.empty.fire();
20003				}
20004			} );
20005		} );
20006	}
20007
20008	// Detect show/hide animations
20009	for ( prop in props ) {
20010		value = props[ prop ];
20011		if ( rfxtypes.test( value ) ) {
20012			delete props[ prop ];
20013			toggle = toggle || value === "toggle";
20014			if ( value === ( hidden ? "hide" : "show" ) ) {
20015
20016				// Pretend to be hidden if this is a "show" and
20017				// there is still data from a stopped show/hide
20018				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20019					hidden = true;
20020
20021				// Ignore all other no-op show/hide data
20022				} else {
20023					continue;
20024				}
20025			}
20026			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20027		}
20028	}
20029
20030	// Bail out if this is a no-op like .hide().hide()
20031	propTween = !jQuery.isEmptyObject( props );
20032	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20033		return;
20034	}
20035
20036	// Restrict "overflow" and "display" styles during box animations
20037	if ( isBox && elem.nodeType === 1 ) {
20038
20039		// Support: IE <=9 - 11, Edge 12 - 15
20040		// Record all 3 overflow attributes because IE does not infer the shorthand
20041		// from identically-valued overflowX and overflowY and Edge just mirrors
20042		// the overflowX value there.
20043		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20044
20045		// Identify a display type, preferring old show/hide data over the CSS cascade
20046		restoreDisplay = dataShow && dataShow.display;
20047		if ( restoreDisplay == null ) {
20048			restoreDisplay = dataPriv.get( elem, "display" );
20049		}
20050		display = jQuery.css( elem, "display" );
20051		if ( display === "none" ) {
20052			if ( restoreDisplay ) {
20053				display = restoreDisplay;
20054			} else {
20055
20056				// Get nonempty value(s) by temporarily forcing visibility
20057				showHide( [ elem ], true );
20058				restoreDisplay = elem.style.display || restoreDisplay;
20059				display = jQuery.css( elem, "display" );
20060				showHide( [ elem ] );
20061			}
20062		}
20063
20064		// Animate inline elements as inline-block
20065		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20066			if ( jQuery.css( elem, "float" ) === "none" ) {
20067
20068				// Restore the original display value at the end of pure show/hide animations
20069				if ( !propTween ) {
20070					anim.done( function() {
20071						style.display = restoreDisplay;
20072					} );
20073					if ( restoreDisplay == null ) {
20074						display = style.display;
20075						restoreDisplay = display === "none" ? "" : display;
20076					}
20077				}
20078				style.display = "inline-block";
20079			}
20080		}
20081	}
20082
20083	if ( opts.overflow ) {
20084		style.overflow = "hidden";
20085		anim.always( function() {
20086			style.overflow = opts.overflow[ 0 ];
20087			style.overflowX = opts.overflow[ 1 ];
20088			style.overflowY = opts.overflow[ 2 ];
20089		} );
20090	}
20091
20092	// Implement show/hide animations
20093	propTween = false;
20094	for ( prop in orig ) {
20095
20096		// General show/hide setup for this element animation
20097		if ( !propTween ) {
20098			if ( dataShow ) {
20099				if ( "hidden" in dataShow ) {
20100					hidden = dataShow.hidden;
20101				}
20102			} else {
20103				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20104			}
20105
20106			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20107			if ( toggle ) {
20108				dataShow.hidden = !hidden;
20109			}
20110
20111			// Show elements before animating them
20112			if ( hidden ) {
20113				showHide( [ elem ], true );
20114			}
20115
20116			/* eslint-disable no-loop-func */
20117
20118			anim.done( function() {
20119
20120				/* eslint-enable no-loop-func */
20121
20122				// The final step of a "hide" animation is actually hiding the element
20123				if ( !hidden ) {
20124					showHide( [ elem ] );
20125				}
20126				dataPriv.remove( elem, "fxshow" );
20127				for ( prop in orig ) {
20128					jQuery.style( elem, prop, orig[ prop ] );
20129				}
20130			} );
20131		}
20132
20133		// Per-property setup
20134		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
20135		if ( !( prop in dataShow ) ) {
20136			dataShow[ prop ] = propTween.start;
20137			if ( hidden ) {
20138				propTween.end = propTween.start;
20139				propTween.start = 0;
20140			}
20141		}
20142	}
20143}
20144
20145function propFilter( props, specialEasing ) {
20146	var index, name, easing, value, hooks;
20147
20148	// camelCase, specialEasing and expand cssHook pass
20149	for ( index in props ) {
20150		name = camelCase( index );
20151		easing = specialEasing[ name ];
20152		value = props[ index ];
20153		if ( Array.isArray( value ) ) {
20154			easing = value[ 1 ];
20155			value = props[ index ] = value[ 0 ];
20156		}
20157
20158		if ( index !== name ) {
20159			props[ name ] = value;
20160			delete props[ index ];
20161		}
20162
20163		hooks = jQuery.cssHooks[ name ];
20164		if ( hooks && "expand" in hooks ) {
20165			value = hooks.expand( value );
20166			delete props[ name ];
20167
20168			// Not quite $.extend, this won't overwrite existing keys.
20169			// Reusing 'index' because we have the correct "name"
20170			for ( index in value ) {
20171				if ( !( index in props ) ) {
20172					props[ index ] = value[ index ];
20173					specialEasing[ index ] = easing;
20174				}
20175			}
20176		} else {
20177			specialEasing[ name ] = easing;
20178		}
20179	}
20180}
20181
20182function Animation( elem, properties, options ) {
20183	var result,
20184		stopped,
20185		index = 0,
20186		length = Animation.prefilters.length,
20187		deferred = jQuery.Deferred().always( function() {
20188
20189			// Don't match elem in the :animated selector
20190			delete tick.elem;
20191		} ),
20192		tick = function() {
20193			if ( stopped ) {
20194				return false;
20195			}
20196			var currentTime = fxNow || createFxNow(),
20197				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
20198
20199				// Support: Android 2.3 only
20200				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
20201				temp = remaining / animation.duration || 0,
20202				percent = 1 - temp,
20203				index = 0,
20204				length = animation.tweens.length;
20205
20206			for ( ; index < length; index++ ) {
20207				animation.tweens[ index ].run( percent );
20208			}
20209
20210			deferred.notifyWith( elem, [ animation, percent, remaining ] );
20211
20212			// If there's more to do, yield
20213			if ( percent < 1 && length ) {
20214				return remaining;
20215			}
20216
20217			// If this was an empty animation, synthesize a final progress notification
20218			if ( !length ) {
20219				deferred.notifyWith( elem, [ animation, 1, 0 ] );
20220			}
20221
20222			// Resolve the animation and report its conclusion
20223			deferred.resolveWith( elem, [ animation ] );
20224			return false;
20225		},
20226		animation = deferred.promise( {
20227			elem: elem,
20228			props: jQuery.extend( {}, properties ),
20229			opts: jQuery.extend( true, {
20230				specialEasing: {},
20231				easing: jQuery.easing._default
20232			}, options ),
20233			originalProperties: properties,
20234			originalOptions: options,
20235			startTime: fxNow || createFxNow(),
20236			duration: options.duration,
20237			tweens: [],
20238			createTween: function( prop, end ) {
20239				var tween = jQuery.Tween( elem, animation.opts, prop, end,
20240					animation.opts.specialEasing[ prop ] || animation.opts.easing );
20241				animation.tweens.push( tween );
20242				return tween;
20243			},
20244			stop: function( gotoEnd ) {
20245				var index = 0,
20246
20247					// If we are going to the end, we want to run all the tweens
20248					// otherwise we skip this part
20249					length = gotoEnd ? animation.tweens.length : 0;
20250				if ( stopped ) {
20251					return this;
20252				}
20253				stopped = true;
20254				for ( ; index < length; index++ ) {
20255					animation.tweens[ index ].run( 1 );
20256				}
20257
20258				// Resolve when we played the last frame; otherwise, reject
20259				if ( gotoEnd ) {
20260					deferred.notifyWith( elem, [ animation, 1, 0 ] );
20261					deferred.resolveWith( elem, [ animation, gotoEnd ] );
20262				} else {
20263					deferred.rejectWith( elem, [ animation, gotoEnd ] );
20264				}
20265				return this;
20266			}
20267		} ),
20268		props = animation.props;
20269
20270	propFilter( props, animation.opts.specialEasing );
20271
20272	for ( ; index < length; index++ ) {
20273		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
20274		if ( result ) {
20275			if ( isFunction( result.stop ) ) {
20276				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
20277					result.stop.bind( result );
20278			}
20279			return result;
20280		}
20281	}
20282
20283	jQuery.map( props, createTween, animation );
20284
20285	if ( isFunction( animation.opts.start ) ) {
20286		animation.opts.start.call( elem, animation );
20287	}
20288
20289	// Attach callbacks from options
20290	animation
20291		.progress( animation.opts.progress )
20292		.done( animation.opts.done, animation.opts.complete )
20293		.fail( animation.opts.fail )
20294		.always( animation.opts.always );
20295
20296	jQuery.fx.timer(
20297		jQuery.extend( tick, {
20298			elem: elem,
20299			anim: animation,
20300			queue: animation.opts.queue
20301		} )
20302	);
20303
20304	return animation;
20305}
20306
20307jQuery.Animation = jQuery.extend( Animation, {
20308
20309	tweeners: {
20310		"*": [ function( prop, value ) {
20311			var tween = this.createTween( prop, value );
20312			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
20313			return tween;
20314		} ]
20315	},
20316
20317	tweener: function( props, callback ) {
20318		if ( isFunction( props ) ) {
20319			callback = props;
20320			props = [ "*" ];
20321		} else {
20322			props = props.match( rnothtmlwhite );
20323		}
20324
20325		var prop,
20326			index = 0,
20327			length = props.length;
20328
20329		for ( ; index < length; index++ ) {
20330			prop = props[ index ];
20331			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
20332			Animation.tweeners[ prop ].unshift( callback );
20333		}
20334	},
20335
20336	prefilters: [ defaultPrefilter ],
20337
20338	prefilter: function( callback, prepend ) {
20339		if ( prepend ) {
20340			Animation.prefilters.unshift( callback );
20341		} else {
20342			Animation.prefilters.push( callback );
20343		}
20344	}
20345} );
20346
20347jQuery.speed = function( speed, easing, fn ) {
20348	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
20349		complete: fn || !fn && easing ||
20350			isFunction( speed ) && speed,
20351		duration: speed,
20352		easing: fn && easing || easing && !isFunction( easing ) && easing
20353	};
20354
20355	// Go to the end state if fx are off
20356	if ( jQuery.fx.off ) {
20357		opt.duration = 0;
20358
20359	} else {
20360		if ( typeof opt.duration !== "number" ) {
20361			if ( opt.duration in jQuery.fx.speeds ) {
20362				opt.duration = jQuery.fx.speeds[ opt.duration ];
20363
20364			} else {
20365				opt.duration = jQuery.fx.speeds._default;
20366			}
20367		}
20368	}
20369
20370	// Normalize opt.queue - true/undefined/null -> "fx"
20371	if ( opt.queue == null || opt.queue === true ) {
20372		opt.queue = "fx";
20373	}
20374
20375	// Queueing
20376	opt.old = opt.complete;
20377
20378	opt.complete = function() {
20379		if ( isFunction( opt.old ) ) {
20380			opt.old.call( this );
20381		}
20382
20383		if ( opt.queue ) {
20384			jQuery.dequeue( this, opt.queue );
20385		}
20386	};
20387
20388	return opt;
20389};
20390
20391jQuery.fn.extend( {
20392	fadeTo: function( speed, to, easing, callback ) {
20393
20394		// Show any hidden elements after setting opacity to 0
20395		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
20396
20397			// Animate to the value specified
20398			.end().animate( { opacity: to }, speed, easing, callback );
20399	},
20400	animate: function( prop, speed, easing, callback ) {
20401		var empty = jQuery.isEmptyObject( prop ),
20402			optall = jQuery.speed( speed, easing, callback ),
20403			doAnimation = function() {
20404
20405				// Operate on a copy of prop so per-property easing won't be lost
20406				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
20407
20408				// Empty animations, or finishing resolves immediately
20409				if ( empty || dataPriv.get( this, "finish" ) ) {
20410					anim.stop( true );
20411				}
20412			};
20413
20414		doAnimation.finish = doAnimation;
20415
20416		return empty || optall.queue === false ?
20417			this.each( doAnimation ) :
20418			this.queue( optall.queue, doAnimation );
20419	},
20420	stop: function( type, clearQueue, gotoEnd ) {
20421		var stopQueue = function( hooks ) {
20422			var stop = hooks.stop;
20423			delete hooks.stop;
20424			stop( gotoEnd );
20425		};
20426
20427		if ( typeof type !== "string" ) {
20428			gotoEnd = clearQueue;
20429			clearQueue = type;
20430			type = undefined;
20431		}
20432		if ( clearQueue ) {
20433			this.queue( type || "fx", [] );
20434		}
20435
20436		return this.each( function() {
20437			var dequeue = true,
20438				index = type != null && type + "queueHooks",
20439				timers = jQuery.timers,
20440				data = dataPriv.get( this );
20441
20442			if ( index ) {
20443				if ( data[ index ] && data[ index ].stop ) {
20444					stopQueue( data[ index ] );
20445				}
20446			} else {
20447				for ( index in data ) {
20448					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
20449						stopQueue( data[ index ] );
20450					}
20451				}
20452			}
20453
20454			for ( index = timers.length; index--; ) {
20455				if ( timers[ index ].elem === this &&
20456					( type == null || timers[ index ].queue === type ) ) {
20457
20458					timers[ index ].anim.stop( gotoEnd );
20459					dequeue = false;
20460					timers.splice( index, 1 );
20461				}
20462			}
20463
20464			// Start the next in the queue if the last step wasn't forced.
20465			// Timers currently will call their complete callbacks, which
20466			// will dequeue but only if they were gotoEnd.
20467			if ( dequeue || !gotoEnd ) {
20468				jQuery.dequeue( this, type );
20469			}
20470		} );
20471	},
20472	finish: function( type ) {
20473		if ( type !== false ) {
20474			type = type || "fx";
20475		}
20476		return this.each( function() {
20477			var index,
20478				data = dataPriv.get( this ),
20479				queue = data[ type + "queue" ],
20480				hooks = data[ type + "queueHooks" ],
20481				timers = jQuery.timers,
20482				length = queue ? queue.length : 0;
20483
20484			// Enable finishing flag on private data
20485			data.finish = true;
20486
20487			// Empty the queue first
20488			jQuery.queue( this, type, [] );
20489
20490			if ( hooks && hooks.stop ) {
20491				hooks.stop.call( this, true );
20492			}
20493
20494			// Look for any active animations, and finish them
20495			for ( index = timers.length; index--; ) {
20496				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
20497					timers[ index ].anim.stop( true );
20498					timers.splice( index, 1 );
20499				}
20500			}
20501
20502			// Look for any animations in the old queue and finish them
20503			for ( index = 0; index < length; index++ ) {
20504				if ( queue[ index ] && queue[ index ].finish ) {
20505					queue[ index ].finish.call( this );
20506				}
20507			}
20508
20509			// Turn off finishing flag
20510			delete data.finish;
20511		} );
20512	}
20513} );
20514
20515jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
20516	var cssFn = jQuery.fn[ name ];
20517	jQuery.fn[ name ] = function( speed, easing, callback ) {
20518		return speed == null || typeof speed === "boolean" ?
20519			cssFn.apply( this, arguments ) :
20520			this.animate( genFx( name, true ), speed, easing, callback );
20521	};
20522} );
20523
20524// Generate shortcuts for custom animations
20525jQuery.each( {
20526	slideDown: genFx( "show" ),
20527	slideUp: genFx( "hide" ),
20528	slideToggle: genFx( "toggle" ),
20529	fadeIn: { opacity: "show" },
20530	fadeOut: { opacity: "hide" },
20531	fadeToggle: { opacity: "toggle" }
20532}, function( name, props ) {
20533	jQuery.fn[ name ] = function( speed, easing, callback ) {
20534		return this.animate( props, speed, easing, callback );
20535	};
20536} );
20537
20538jQuery.timers = [];
20539jQuery.fx.tick = function() {
20540	var timer,
20541		i = 0,
20542		timers = jQuery.timers;
20543
20544	fxNow = Date.now();
20545
20546	for ( ; i < timers.length; i++ ) {
20547		timer = timers[ i ];
20548
20549		// Run the timer and safely remove it when done (allowing for external removal)
20550		if ( !timer() && timers[ i ] === timer ) {
20551			timers.splice( i--, 1 );
20552		}
20553	}
20554
20555	if ( !timers.length ) {
20556		jQuery.fx.stop();
20557	}
20558	fxNow = undefined;
20559};
20560
20561jQuery.fx.timer = function( timer ) {
20562	jQuery.timers.push( timer );
20563	jQuery.fx.start();
20564};
20565
20566jQuery.fx.interval = 13;
20567jQuery.fx.start = function() {
20568	if ( inProgress ) {
20569		return;
20570	}
20571
20572	inProgress = true;
20573	schedule();
20574};
20575
20576jQuery.fx.stop = function() {
20577	inProgress = null;
20578};
20579
20580jQuery.fx.speeds = {
20581	slow: 600,
20582	fast: 200,
20583
20584	// Default speed
20585	_default: 400
20586};
20587
20588
20589// Based off of the plugin by Clint Helfers, with permission.
20590jQuery.fn.delay = function( time, type ) {
20591	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
20592	type = type || "fx";
20593
20594	return this.queue( type, function( next, hooks ) {
20595		var timeout = window.setTimeout( next, time );
20596		hooks.stop = function() {
20597			window.clearTimeout( timeout );
20598		};
20599	} );
20600};
20601
20602
20603( function() {
20604	var input = document.createElement( "input" ),
20605		select = document.createElement( "select" ),
20606		opt = select.appendChild( document.createElement( "option" ) );
20607
20608	input.type = "checkbox";
20609
20610	// Support: Android <=4.3 only
20611	// Default value for a checkbox should be "on"
20612	support.checkOn = input.value !== "";
20613
20614	// Support: IE <=11 only
20615	// Must access selectedIndex to make default options select
20616	support.optSelected = opt.selected;
20617
20618	// Support: IE <=11 only
20619	// An input loses its value after becoming a radio
20620	input = document.createElement( "input" );
20621	input.value = "t";
20622	input.type = "radio";
20623	support.radioValue = input.value === "t";
20624} )();
20625
20626
20627var boolHook,
20628	attrHandle = jQuery.expr.attrHandle;
20629
20630jQuery.fn.extend( {
20631	attr: function( name, value ) {
20632		return access( this, jQuery.attr, name, value, arguments.length > 1 );
20633	},
20634
20635	removeAttr: function( name ) {
20636		return this.each( function() {
20637			jQuery.removeAttr( this, name );
20638		} );
20639	}
20640} );
20641
20642jQuery.extend( {
20643	attr: function( elem, name, value ) {
20644		var ret, hooks,
20645			nType = elem.nodeType;
20646
20647		// Don't get/set attributes on text, comment and attribute nodes
20648		if ( nType === 3 || nType === 8 || nType === 2 ) {
20649			return;
20650		}
20651
20652		// Fallback to prop when attributes are not supported
20653		if ( typeof elem.getAttribute === "undefined" ) {
20654			return jQuery.prop( elem, name, value );
20655		}
20656
20657		// Attribute hooks are determined by the lowercase version
20658		// Grab necessary hook if one is defined
20659		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
20660			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
20661				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
20662		}
20663
20664		if ( value !== undefined ) {
20665			if ( value === null ) {
20666				jQuery.removeAttr( elem, name );
20667				return;
20668			}
20669
20670			if ( hooks && "set" in hooks &&
20671				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
20672				return ret;
20673			}
20674
20675			elem.setAttribute( name, value + "" );
20676			return value;
20677		}
20678
20679		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
20680			return ret;
20681		}
20682
20683		ret = jQuery.find.attr( elem, name );
20684
20685		// Non-existent attributes return null, we normalize to undefined
20686		return ret == null ? undefined : ret;
20687	},
20688
20689	attrHooks: {
20690		type: {
20691			set: function( elem, value ) {
20692				if ( !support.radioValue && value === "radio" &&
20693					nodeName( elem, "input" ) ) {
20694					var val = elem.value;
20695					elem.setAttribute( "type", value );
20696					if ( val ) {
20697						elem.value = val;
20698					}
20699					return value;
20700				}
20701			}
20702		}
20703	},
20704
20705	removeAttr: function( elem, value ) {
20706		var name,
20707			i = 0,
20708
20709			// Attribute names can contain non-HTML whitespace characters
20710			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
20711			attrNames = value && value.match( rnothtmlwhite );
20712
20713		if ( attrNames && elem.nodeType === 1 ) {
20714			while ( ( name = attrNames[ i++ ] ) ) {
20715				elem.removeAttribute( name );
20716			}
20717		}
20718	}
20719} );
20720
20721// Hooks for boolean attributes
20722boolHook = {
20723	set: function( elem, value, name ) {
20724		if ( value === false ) {
20725
20726			// Remove boolean attributes when set to false
20727			jQuery.removeAttr( elem, name );
20728		} else {
20729			elem.setAttribute( name, name );
20730		}
20731		return name;
20732	}
20733};
20734
20735jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
20736	var getter = attrHandle[ name ] || jQuery.find.attr;
20737
20738	attrHandle[ name ] = function( elem, name, isXML ) {
20739		var ret, handle,
20740			lowercaseName = name.toLowerCase();
20741
20742		if ( !isXML ) {
20743
20744			// Avoid an infinite loop by temporarily removing this function from the getter
20745			handle = attrHandle[ lowercaseName ];
20746			attrHandle[ lowercaseName ] = ret;
20747			ret = getter( elem, name, isXML ) != null ?
20748				lowercaseName :
20749				null;
20750			attrHandle[ lowercaseName ] = handle;
20751		}
20752		return ret;
20753	};
20754} );
20755
20756
20757
20758
20759var rfocusable = /^(?:input|select|textarea|button)$/i,
20760	rclickable = /^(?:a|area)$/i;
20761
20762jQuery.fn.extend( {
20763	prop: function( name, value ) {
20764		return access( this, jQuery.prop, name, value, arguments.length > 1 );
20765	},
20766
20767	removeProp: function( name ) {
20768		return this.each( function() {
20769			delete this[ jQuery.propFix[ name ] || name ];
20770		} );
20771	}
20772} );
20773
20774jQuery.extend( {
20775	prop: function( elem, name, value ) {
20776		var ret, hooks,
20777			nType = elem.nodeType;
20778
20779		// Don't get/set properties on text, comment and attribute nodes
20780		if ( nType === 3 || nType === 8 || nType === 2 ) {
20781			return;
20782		}
20783
20784		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
20785
20786			// Fix name and attach hooks
20787			name = jQuery.propFix[ name ] || name;
20788			hooks = jQuery.propHooks[ name ];
20789		}
20790
20791		if ( value !== undefined ) {
20792			if ( hooks && "set" in hooks &&
20793				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
20794				return ret;
20795			}
20796
20797			return ( elem[ name ] = value );
20798		}
20799
20800		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
20801			return ret;
20802		}
20803
20804		return elem[ name ];
20805	},
20806
20807	propHooks: {
20808		tabIndex: {
20809			get: function( elem ) {
20810
20811				// Support: IE <=9 - 11 only
20812				// elem.tabIndex doesn't always return the
20813				// correct value when it hasn't been explicitly set
20814				// Use proper attribute retrieval (trac-12072)
20815				var tabindex = jQuery.find.attr( elem, "tabindex" );
20816
20817				if ( tabindex ) {
20818					return parseInt( tabindex, 10 );
20819				}
20820
20821				if (
20822					rfocusable.test( elem.nodeName ) ||
20823					rclickable.test( elem.nodeName ) &&
20824					elem.href
20825				) {
20826					return 0;
20827				}
20828
20829				return -1;
20830			}
20831		}
20832	},
20833
20834	propFix: {
20835		"for": "htmlFor",
20836		"class": "className"
20837	}
20838} );
20839
20840// Support: IE <=11 only
20841// Accessing the selectedIndex property
20842// forces the browser to respect setting selected
20843// on the option
20844// The getter ensures a default option is selected
20845// when in an optgroup
20846// eslint rule "no-unused-expressions" is disabled for this code
20847// since it considers such accessions noop
20848if ( !support.optSelected ) {
20849	jQuery.propHooks.selected = {
20850		get: function( elem ) {
20851
20852			/* eslint no-unused-expressions: "off" */
20853
20854			var parent = elem.parentNode;
20855			if ( parent && parent.parentNode ) {
20856				parent.parentNode.selectedIndex;
20857			}
20858			return null;
20859		},
20860		set: function( elem ) {
20861
20862			/* eslint no-unused-expressions: "off" */
20863
20864			var parent = elem.parentNode;
20865			if ( parent ) {
20866				parent.selectedIndex;
20867
20868				if ( parent.parentNode ) {
20869					parent.parentNode.selectedIndex;
20870				}
20871			}
20872		}
20873	};
20874}
20875
20876jQuery.each( [
20877	"tabIndex",
20878	"readOnly",
20879	"maxLength",
20880	"cellSpacing",
20881	"cellPadding",
20882	"rowSpan",
20883	"colSpan",
20884	"useMap",
20885	"frameBorder",
20886	"contentEditable"
20887], function() {
20888	jQuery.propFix[ this.toLowerCase() ] = this;
20889} );
20890
20891
20892
20893
20894	// Strip and collapse whitespace according to HTML spec
20895	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
20896	function stripAndCollapse( value ) {
20897		var tokens = value.match( rnothtmlwhite ) || [];
20898		return tokens.join( " " );
20899	}
20900
20901
20902function getClass( elem ) {
20903	return elem.getAttribute && elem.getAttribute( "class" ) || "";
20904}
20905
20906function classesToArray( value ) {
20907	if ( Array.isArray( value ) ) {
20908		return value;
20909	}
20910	if ( typeof value === "string" ) {
20911		return value.match( rnothtmlwhite ) || [];
20912	}
20913	return [];
20914}
20915
20916jQuery.fn.extend( {
20917	addClass: function( value ) {
20918		var classNames, cur, curValue, className, i, finalValue;
20919
20920		if ( isFunction( value ) ) {
20921			return this.each( function( j ) {
20922				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
20923			} );
20924		}
20925
20926		classNames = classesToArray( value );
20927
20928		if ( classNames.length ) {
20929			return this.each( function() {
20930				curValue = getClass( this );
20931				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
20932
20933				if ( cur ) {
20934					for ( i = 0; i < classNames.length; i++ ) {
20935						className = classNames[ i ];
20936						if ( cur.indexOf( " " + className + " " ) < 0 ) {
20937							cur += className + " ";
20938						}
20939					}
20940
20941					// Only assign if different to avoid unneeded rendering.
20942					finalValue = stripAndCollapse( cur );
20943					if ( curValue !== finalValue ) {
20944						this.setAttribute( "class", finalValue );
20945					}
20946				}
20947			} );
20948		}
20949
20950		return this;
20951	},
20952
20953	removeClass: function( value ) {
20954		var classNames, cur, curValue, className, i, finalValue;
20955
20956		if ( isFunction( value ) ) {
20957			return this.each( function( j ) {
20958				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
20959			} );
20960		}
20961
20962		if ( !arguments.length ) {
20963			return this.attr( "class", "" );
20964		}
20965
20966		classNames = classesToArray( value );
20967
20968		if ( classNames.length ) {
20969			return this.each( function() {
20970				curValue = getClass( this );
20971
20972				// This expression is here for better compressibility (see addClass)
20973				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
20974
20975				if ( cur ) {
20976					for ( i = 0; i < classNames.length; i++ ) {
20977						className = classNames[ i ];
20978
20979						// Remove *all* instances
20980						while ( cur.indexOf( " " + className + " " ) > -1 ) {
20981							cur = cur.replace( " " + className + " ", " " );
20982						}
20983					}
20984
20985					// Only assign if different to avoid unneeded rendering.
20986					finalValue = stripAndCollapse( cur );
20987					if ( curValue !== finalValue ) {
20988						this.setAttribute( "class", finalValue );
20989					}
20990				}
20991			} );
20992		}
20993
20994		return this;
20995	},
20996
20997	toggleClass: function( value, stateVal ) {
20998		var classNames, className, i, self,
20999			type = typeof value,
21000			isValidValue = type === "string" || Array.isArray( value );
21001
21002		if ( isFunction( value ) ) {
21003			return this.each( function( i ) {
21004				jQuery( this ).toggleClass(
21005					value.call( this, i, getClass( this ), stateVal ),
21006					stateVal
21007				);
21008			} );
21009		}
21010
21011		if ( typeof stateVal === "boolean" && isValidValue ) {
21012			return stateVal ? this.addClass( value ) : this.removeClass( value );
21013		}
21014
21015		classNames = classesToArray( value );
21016
21017		return this.each( function() {
21018			if ( isValidValue ) {
21019
21020				// Toggle individual class names
21021				self = jQuery( this );
21022
21023				for ( i = 0; i < classNames.length; i++ ) {
21024					className = classNames[ i ];
21025
21026					// Check each className given, space separated list
21027					if ( self.hasClass( className ) ) {
21028						self.removeClass( className );
21029					} else {
21030						self.addClass( className );
21031					}
21032				}
21033
21034			// Toggle whole class name
21035			} else if ( value === undefined || type === "boolean" ) {
21036				className = getClass( this );
21037				if ( className ) {
21038
21039					// Store className if set
21040					dataPriv.set( this, "__className__", className );
21041				}
21042
21043				// If the element has a class name or if we're passed `false`,
21044				// then remove the whole classname (if there was one, the above saved it).
21045				// Otherwise bring back whatever was previously saved (if anything),
21046				// falling back to the empty string if nothing was stored.
21047				if ( this.setAttribute ) {
21048					this.setAttribute( "class",
21049						className || value === false ?
21050							"" :
21051							dataPriv.get( this, "__className__" ) || ""
21052					);
21053				}
21054			}
21055		} );
21056	},
21057
21058	hasClass: function( selector ) {
21059		var className, elem,
21060			i = 0;
21061
21062		className = " " + selector + " ";
21063		while ( ( elem = this[ i++ ] ) ) {
21064			if ( elem.nodeType === 1 &&
21065				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21066				return true;
21067			}
21068		}
21069
21070		return false;
vendor: 1,385 bytes, lines 21071-21140
21071	}
21072} );
21073
21074
21075
21076
21077var rreturn = /\r/g;
21078
21079jQuery.fn.extend( {
21080	val: function( value ) {
21081		var hooks, ret, valueIsFunction,
21082			elem = this[ 0 ];
21083
21084		if ( !arguments.length ) {
21085			if ( elem ) {
21086				hooks = jQuery.valHooks[ elem.type ] ||
21087					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21088
21089				if ( hooks &&
21090					"get" in hooks &&
21091					( ret = hooks.get( elem, "value" ) ) !== undefined
21092				) {
21093					return ret;
21094				}
21095
21096				ret = elem.value;
21097
21098				// Handle most common string cases
21099				if ( typeof ret === "string" ) {
21100					return ret.replace( rreturn, "" );
21101				}
21102
21103				// Handle cases where value is null/undef or number
21104				return ret == null ? "" : ret;
21105			}
21106
21107			return;
21108		}
21109
21110		valueIsFunction = isFunction( value );
21111
21112		return this.each( function( i ) {
21113			var val;
21114
21115			if ( this.nodeType !== 1 ) {
21116				return;
21117			}
21118
21119			if ( valueIsFunction ) {
21120				val = value.call( this, i, jQuery( this ).val() );
21121			} else {
21122				val = value;
21123			}
21124
21125			// Treat null/undefined as ""; convert numbers to string
21126			if ( val == null ) {
21127				val = "";
21128
21129			} else if ( typeof val === "number" ) {
21130				val += "";
21131
21132			} else if ( Array.isArray( val ) ) {
21133				val = jQuery.map( val, function( value ) {
21134					return value == null ? "" : value + "";
21135				} );
21136			}
21137
21138			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
21139
21140			// If set returns undefined, fall back to normal setting
vendor: 43,419 bytes, lines 21141-22830
21141			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
21142				this.value = val;
21143			}
21144		} );
21145	}
21146} );
21147
21148jQuery.extend( {
21149	valHooks: {
21150		option: {
21151			get: function( elem ) {
21152
21153				var val = jQuery.find.attr( elem, "value" );
21154				return val != null ?
21155					val :
21156
21157					// Support: IE <=10 - 11 only
21158					// option.text throws exceptions (trac-14686, trac-14858)
21159					// Strip and collapse whitespace
21160					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
21161					stripAndCollapse( jQuery.text( elem ) );
21162			}
21163		},
21164		select: {
21165			get: function( elem ) {
21166				var value, option, i,
21167					options = elem.options,
21168					index = elem.selectedIndex,
21169					one = elem.type === "select-one",
21170					values = one ? null : [],
21171					max = one ? index + 1 : options.length;
21172
21173				if ( index < 0 ) {
21174					i = max;
21175
21176				} else {
21177					i = one ? index : 0;
21178				}
21179
21180				// Loop through all the selected options
21181				for ( ; i < max; i++ ) {
21182					option = options[ i ];
21183
21184					// Support: IE <=9 only
21185					// IE8-9 doesn't update selected after form reset (trac-2551)
21186					if ( ( option.selected || i === index ) &&
21187
21188							// Don't return options that are disabled or in a disabled optgroup
21189							!option.disabled &&
21190							( !option.parentNode.disabled ||
21191								!nodeName( option.parentNode, "optgroup" ) ) ) {
21192
21193						// Get the specific value for the option
21194						value = jQuery( option ).val();
21195
21196						// We don't need an array for one selects
21197						if ( one ) {
21198							return value;
21199						}
21200
21201						// Multi-Selects return an array
21202						values.push( value );
21203					}
21204				}
21205
21206				return values;
21207			},
21208
21209			set: function( elem, value ) {
21210				var optionSet, option,
21211					options = elem.options,
21212					values = jQuery.makeArray( value ),
21213					i = options.length;
21214
21215				while ( i-- ) {
21216					option = options[ i ];
21217
21218					/* eslint-disable no-cond-assign */
21219
21220					if ( option.selected =
21221						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
21222					) {
21223						optionSet = true;
21224					}
21225
21226					/* eslint-enable no-cond-assign */
21227				}
21228
21229				// Force browsers to behave consistently when non-matching value is set
21230				if ( !optionSet ) {
21231					elem.selectedIndex = -1;
21232				}
21233				return values;
21234			}
21235		}
21236	}
21237} );
21238
21239// Radios and checkboxes getter/setter
21240jQuery.each( [ "radio", "checkbox" ], function() {
21241	jQuery.valHooks[ this ] = {
21242		set: function( elem, value ) {
21243			if ( Array.isArray( value ) ) {
21244				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
21245			}
21246		}
21247	};
21248	if ( !support.checkOn ) {
21249		jQuery.valHooks[ this ].get = function( elem ) {
21250			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
21251		};
21252	}
21253} );
21254
21255
21256
21257
21258// Return jQuery for attributes-only inclusion
21259var location = window.location;
21260
21261var nonce = { guid: Date.now() };
21262
21263var rquery = ( /\?/ );
21264
21265
21266
21267// Cross-browser xml parsing
21268jQuery.parseXML = function( data ) {
21269	var xml, parserErrorElem;
21270	if ( !data || typeof data !== "string" ) {
21271		return null;
21272	}
21273
21274	// Support: IE 9 - 11 only
21275	// IE throws on parseFromString with invalid input.
21276	try {
21277		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
21278	} catch ( e ) {}
21279
21280	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
21281	if ( !xml || parserErrorElem ) {
21282		jQuery.error( "Invalid XML: " + (
21283			parserErrorElem ?
21284				jQuery.map( parserErrorElem.childNodes, function( el ) {
21285					return el.textContent;
21286				} ).join( "\n" ) :
21287				data
21288		) );
21289	}
21290	return xml;
21291};
21292
21293
21294var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
21295	stopPropagationCallback = function( e ) {
21296		e.stopPropagation();
21297	};
21298
21299jQuery.extend( jQuery.event, {
21300
21301	trigger: function( event, data, elem, onlyHandlers ) {
21302
21303		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
21304			eventPath = [ elem || document ],
21305			type = hasOwn.call( event, "type" ) ? event.type : event,
21306			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
21307
21308		cur = lastElement = tmp = elem = elem || document;
21309
21310		// Don't do events on text and comment nodes
21311		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
21312			return;
21313		}
21314
21315		// focus/blur morphs to focusin/out; ensure we're not firing them right now
21316		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
21317			return;
21318		}
21319
21320		if ( type.indexOf( "." ) > -1 ) {
21321
21322			// Namespaced trigger; create a regexp to match event type in handle()
21323			namespaces = type.split( "." );
21324			type = namespaces.shift();
21325			namespaces.sort();
21326		}
21327		ontype = type.indexOf( ":" ) < 0 && "on" + type;
21328
21329		// Caller can pass in a jQuery.Event object, Object, or just an event type string
21330		event = event[ jQuery.expando ] ?
21331			event :
21332			new jQuery.Event( type, typeof event === "object" && event );
21333
21334		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
21335		event.isTrigger = onlyHandlers ? 2 : 3;
21336		event.namespace = namespaces.join( "." );
21337		event.rnamespace = event.namespace ?
21338			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
21339			null;
21340
21341		// Clean up the event in case it is being reused
21342		event.result = undefined;
21343		if ( !event.target ) {
21344			event.target = elem;
21345		}
21346
21347		// Clone any incoming data and prepend the event, creating the handler arg list
21348		data = data == null ?
21349			[ event ] :
21350			jQuery.makeArray( data, [ event ] );
21351
21352		// Allow special events to draw outside the lines
21353		special = jQuery.event.special[ type ] || {};
21354		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
21355			return;
21356		}
21357
21358		// Determine event propagation path in advance, per W3C events spec (trac-9951)
21359		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
21360		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
21361
21362			bubbleType = special.delegateType || type;
21363			if ( !rfocusMorph.test( bubbleType + type ) ) {
21364				cur = cur.parentNode;
21365			}
21366			for ( ; cur; cur = cur.parentNode ) {
21367				eventPath.push( cur );
21368				tmp = cur;
21369			}
21370
21371			// Only add window if we got to document (e.g., not plain obj or detached DOM)
21372			if ( tmp === ( elem.ownerDocument || document ) ) {
21373				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
21374			}
21375		}
21376
21377		// Fire handlers on the event path
21378		i = 0;
21379		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
21380			lastElement = cur;
21381			event.type = i > 1 ?
21382				bubbleType :
21383				special.bindType || type;
21384
21385			// jQuery handler
21386			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
21387				dataPriv.get( cur, "handle" );
21388			if ( handle ) {
21389				handle.apply( cur, data );
21390			}
21391
21392			// Native handler
21393			handle = ontype && cur[ ontype ];
21394			if ( handle && handle.apply && acceptData( cur ) ) {
21395				event.result = handle.apply( cur, data );
21396				if ( event.result === false ) {
21397					event.preventDefault();
21398				}
21399			}
21400		}
21401		event.type = type;
21402
21403		// If nobody prevented the default action, do it now
21404		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
21405
21406			if ( ( !special._default ||
21407				special._default.apply( eventPath.pop(), data ) === false ) &&
21408				acceptData( elem ) ) {
21409
21410				// Call a native DOM method on the target with the same name as the event.
21411				// Don't do default actions on window, that's where global variables be (trac-6170)
21412				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
21413
21414					// Don't re-trigger an onFOO event when we call its FOO() method
21415					tmp = elem[ ontype ];
21416
21417					if ( tmp ) {
21418						elem[ ontype ] = null;
21419					}
21420
21421					// Prevent re-triggering of the same event, since we already bubbled it above
21422					jQuery.event.triggered = type;
21423
21424					if ( event.isPropagationStopped() ) {
21425						lastElement.addEventListener( type, stopPropagationCallback );
21426					}
21427
21428					elem[ type ]();
21429
21430					if ( event.isPropagationStopped() ) {
21431						lastElement.removeEventListener( type, stopPropagationCallback );
21432					}
21433
21434					jQuery.event.triggered = undefined;
21435
21436					if ( tmp ) {
21437						elem[ ontype ] = tmp;
21438					}
21439				}
21440			}
21441		}
21442
21443		return event.result;
21444	},
21445
21446	// Piggyback on a donor event to simulate a different one
21447	// Used only for `focus(in | out)` events
21448	simulate: function( type, elem, event ) {
21449		var e = jQuery.extend(
21450			new jQuery.Event(),
21451			event,
21452			{
21453				type: type,
21454				isSimulated: true
21455			}
21456		);
21457
21458		jQuery.event.trigger( e, null, elem );
21459	}
21460
21461} );
21462
21463jQuery.fn.extend( {
21464
21465	trigger: function( type, data ) {
21466		return this.each( function() {
21467			jQuery.event.trigger( type, data, this );
21468		} );
21469	},
21470	triggerHandler: function( type, data ) {
21471		var elem = this[ 0 ];
21472		if ( elem ) {
21473			return jQuery.event.trigger( type, data, elem, true );
21474		}
21475	}
21476} );
21477
21478
21479var
21480	rbracket = /\[\]$/,
21481	rCRLF = /\r?\n/g,
21482	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
21483	rsubmittable = /^(?:input|select|textarea|keygen)/i;
21484
21485function buildParams( prefix, obj, traditional, add ) {
21486	var name;
21487
21488	if ( Array.isArray( obj ) ) {
21489
21490		// Serialize array item.
21491		jQuery.each( obj, function( i, v ) {
21492			if ( traditional || rbracket.test( prefix ) ) {
21493
21494				// Treat each array item as a scalar.
21495				add( prefix, v );
21496
21497			} else {
21498
21499				// Item is non-scalar (array or object), encode its numeric index.
21500				buildParams(
21501					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
21502					v,
21503					traditional,
21504					add
21505				);
21506			}
21507		} );
21508
21509	} else if ( !traditional && toType( obj ) === "object" ) {
21510
21511		// Serialize object item.
21512		for ( name in obj ) {
21513			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
21514		}
21515
21516	} else {
21517
21518		// Serialize scalar item.
21519		add( prefix, obj );
21520	}
21521}
21522
21523// Serialize an array of form elements or a set of
21524// key/values into a query string
21525jQuery.param = function( a, traditional ) {
21526	var prefix,
21527		s = [],
21528		add = function( key, valueOrFunction ) {
21529
21530			// If value is a function, invoke it and use its return value
21531			var value = isFunction( valueOrFunction ) ?
21532				valueOrFunction() :
21533				valueOrFunction;
21534
21535			s[ s.length ] = encodeURIComponent( key ) + "=" +
21536				encodeURIComponent( value == null ? "" : value );
21537		};
21538
21539	if ( a == null ) {
21540		return "";
21541	}
21542
21543	// If an array was passed in, assume that it is an array of form elements.
21544	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
21545
21546		// Serialize the form elements
21547		jQuery.each( a, function() {
21548			add( this.name, this.value );
21549		} );
21550
21551	} else {
21552
21553		// If traditional, encode the "old" way (the way 1.3.2 or older
21554		// did it), otherwise encode params recursively.
21555		for ( prefix in a ) {
21556			buildParams( prefix, a[ prefix ], traditional, add );
21557		}
21558	}
21559
21560	// Return the resulting serialization
21561	return s.join( "&" );
21562};
21563
21564jQuery.fn.extend( {
21565	serialize: function() {
21566		return jQuery.param( this.serializeArray() );
21567	},
21568	serializeArray: function() {
21569		return this.map( function() {
21570
21571			// Can add propHook for "elements" to filter or add form elements
21572			var elements = jQuery.prop( this, "elements" );
21573			return elements ? jQuery.makeArray( elements ) : this;
21574		} ).filter( function() {
21575			var type = this.type;
21576
21577			// Use .is( ":disabled" ) so that fieldset[disabled] works
21578			return this.name && !jQuery( this ).is( ":disabled" ) &&
21579				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
21580				( this.checked || !rcheckableType.test( type ) );
21581		} ).map( function( _i, elem ) {
21582			var val = jQuery( this ).val();
21583
21584			if ( val == null ) {
21585				return null;
21586			}
21587
21588			if ( Array.isArray( val ) ) {
21589				return jQuery.map( val, function( val ) {
21590					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
21591				} );
21592			}
21593
21594			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
21595		} ).get();
21596	}
21597} );
21598
21599
21600var
21601	r20 = /%20/g,
21602	rhash = /#.*$/,
21603	rantiCache = /([?&])_=[^&]*/,
21604	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
21605
21606	// trac-7653, trac-8125, trac-8152: local protocol detection
21607	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
21608	rnoContent = /^(?:GET|HEAD)$/,
21609	rprotocol = /^\/\//,
21610
21611	/* Prefilters
21612	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
21613	 * 2) These are called:
21614	 *    - BEFORE asking for a transport
21615	 *    - AFTER param serialization (s.data is a string if s.processData is true)
21616	 * 3) key is the dataType
21617	 * 4) the catchall symbol "*" can be used
21618	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
21619	 */
21620	prefilters = {},
21621
21622	/* Transports bindings
21623	 * 1) key is the dataType
21624	 * 2) the catchall symbol "*" can be used
21625	 * 3) selection will start with transport dataType and THEN go to "*" if needed
21626	 */
21627	transports = {},
21628
21629	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
21630	allTypes = "*/".concat( "*" ),
21631
21632	// Anchor tag for parsing the document origin
21633	originAnchor = document.createElement( "a" );
21634
21635originAnchor.href = location.href;
21636
21637// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
21638function addToPrefiltersOrTransports( structure ) {
21639
21640	// dataTypeExpression is optional and defaults to "*"
21641	return function( dataTypeExpression, func ) {
21642
21643		if ( typeof dataTypeExpression !== "string" ) {
21644			func = dataTypeExpression;
21645			dataTypeExpression = "*";
21646		}
21647
21648		var dataType,
21649			i = 0,
21650			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
21651
21652		if ( isFunction( func ) ) {
21653
21654			// For each dataType in the dataTypeExpression
21655			while ( ( dataType = dataTypes[ i++ ] ) ) {
21656
21657				// Prepend if requested
21658				if ( dataType[ 0 ] === "+" ) {
21659					dataType = dataType.slice( 1 ) || "*";
21660					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
21661
21662				// Otherwise append
21663				} else {
21664					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
21665				}
21666			}
21667		}
21668	};
21669}
21670
21671// Base inspection function for prefilters and transports
21672function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
21673
21674	var inspected = {},
21675		seekingTransport = ( structure === transports );
21676
21677	function inspect( dataType ) {
21678		var selected;
21679		inspected[ dataType ] = true;
21680		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
21681			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
21682			if ( typeof dataTypeOrTransport === "string" &&
21683				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
21684
21685				options.dataTypes.unshift( dataTypeOrTransport );
21686				inspect( dataTypeOrTransport );
21687				return false;
21688			} else if ( seekingTransport ) {
21689				return !( selected = dataTypeOrTransport );
21690			}
21691		} );
21692		return selected;
21693	}
21694
21695	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
21696}
21697
21698// A special extend for ajax options
21699// that takes "flat" options (not to be deep extended)
21700// Fixes trac-9887
21701function ajaxExtend( target, src ) {
21702	var key, deep,
21703		flatOptions = jQuery.ajaxSettings.flatOptions || {};
21704
21705	for ( key in src ) {
21706		if ( src[ key ] !== undefined ) {
21707			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
21708		}
21709	}
21710	if ( deep ) {
21711		jQuery.extend( true, target, deep );
21712	}
21713
21714	return target;
21715}
21716
21717/* Handles responses to an ajax request:
21718 * - finds the right dataType (mediates between content-type and expected dataType)
21719 * - returns the corresponding response
21720 */
21721function ajaxHandleResponses( s, jqXHR, responses ) {
21722
21723	var ct, type, finalDataType, firstDataType,
21724		contents = s.contents,
21725		dataTypes = s.dataTypes;
21726
21727	// Remove auto dataType and get content-type in the process
21728	while ( dataTypes[ 0 ] === "*" ) {
21729		dataTypes.shift();
21730		if ( ct === undefined ) {
21731			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
21732		}
21733	}
21734
21735	// Check if we're dealing with a known content-type
21736	if ( ct ) {
21737		for ( type in contents ) {
21738			if ( contents[ type ] && contents[ type ].test( ct ) ) {
21739				dataTypes.unshift( type );
21740				break;
21741			}
21742		}
21743	}
21744
21745	// Check to see if we have a response for the expected dataType
21746	if ( dataTypes[ 0 ] in responses ) {
21747		finalDataType = dataTypes[ 0 ];
21748	} else {
21749
21750		// Try convertible dataTypes
21751		for ( type in responses ) {
21752			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
21753				finalDataType = type;
21754				break;
21755			}
21756			if ( !firstDataType ) {
21757				firstDataType = type;
21758			}
21759		}
21760
21761		// Or just use first one
21762		finalDataType = finalDataType || firstDataType;
21763	}
21764
21765	// If we found a dataType
21766	// We add the dataType to the list if needed
21767	// and return the corresponding response
21768	if ( finalDataType ) {
21769		if ( finalDataType !== dataTypes[ 0 ] ) {
21770			dataTypes.unshift( finalDataType );
21771		}
21772		return responses[ finalDataType ];
21773	}
21774}
21775
21776/* Chain conversions given the request and the original response
21777 * Also sets the responseXXX fields on the jqXHR instance
21778 */
21779function ajaxConvert( s, response, jqXHR, isSuccess ) {
21780	var conv2, current, conv, tmp, prev,
21781		converters = {},
21782
21783		// Work with a copy of dataTypes in case we need to modify it for conversion
21784		dataTypes = s.dataTypes.slice();
21785
21786	// Create converters map with lowercased keys
21787	if ( dataTypes[ 1 ] ) {
21788		for ( conv in s.converters ) {
21789			converters[ conv.toLowerCase() ] = s.converters[ conv ];
21790		}
21791	}
21792
21793	current = dataTypes.shift();
21794
21795	// Convert to each sequential dataType
21796	while ( current ) {
21797
21798		if ( s.responseFields[ current ] ) {
21799			jqXHR[ s.responseFields[ current ] ] = response;
21800		}
21801
21802		// Apply the dataFilter if provided
21803		if ( !prev && isSuccess && s.dataFilter ) {
21804			response = s.dataFilter( response, s.dataType );
21805		}
21806
21807		prev = current;
21808		current = dataTypes.shift();
21809
21810		if ( current ) {
21811
21812			// There's only work to do if current dataType is non-auto
21813			if ( current === "*" ) {
21814
21815				current = prev;
21816
21817			// Convert response if prev dataType is non-auto and differs from current
21818			} else if ( prev !== "*" && prev !== current ) {
21819
21820				// Seek a direct converter
21821				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
21822
21823				// If none found, seek a pair
21824				if ( !conv ) {
21825					for ( conv2 in converters ) {
21826
21827						// If conv2 outputs current
21828						tmp = conv2.split( " " );
21829						if ( tmp[ 1 ] === current ) {
21830
21831							// If prev can be converted to accepted input
21832							conv = converters[ prev + " " + tmp[ 0 ] ] ||
21833								converters[ "* " + tmp[ 0 ] ];
21834							if ( conv ) {
21835
21836								// Condense equivalence converters
21837								if ( conv === true ) {
21838									conv = converters[ conv2 ];
21839
21840								// Otherwise, insert the intermediate dataType
21841								} else if ( converters[ conv2 ] !== true ) {
21842									current = tmp[ 0 ];
21843									dataTypes.unshift( tmp[ 1 ] );
21844								}
21845								break;
21846							}
21847						}
21848					}
21849				}
21850
21851				// Apply converter (if not an equivalence)
21852				if ( conv !== true ) {
21853
21854					// Unless errors are allowed to bubble, catch and return them
21855					if ( conv && s.throws ) {
21856						response = conv( response );
21857					} else {
21858						try {
21859							response = conv( response );
21860						} catch ( e ) {
21861							return {
21862								state: "parsererror",
21863								error: conv ? e : "No conversion from " + prev + " to " + current
21864							};
21865						}
21866					}
21867				}
21868			}
21869		}
21870	}
21871
21872	return { state: "success", data: response };
21873}
21874
21875jQuery.extend( {
21876
21877	// Counter for holding the number of active queries
21878	active: 0,
21879
21880	// Last-Modified header cache for next request
21881	lastModified: {},
21882	etag: {},
21883
21884	ajaxSettings: {
21885		url: location.href,
21886		type: "GET",
21887		isLocal: rlocalProtocol.test( location.protocol ),
21888		global: true,
21889		processData: true,
21890		async: true,
21891		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
21892
21893		/*
21894		timeout: 0,
21895		data: null,
21896		dataType: null,
21897		username: null,
21898		password: null,
21899		cache: null,
21900		throws: false,
21901		traditional: false,
21902		headers: {},
21903		*/
21904
21905		accepts: {
21906			"*": allTypes,
21907			text: "text/plain",
21908			html: "text/html",
21909			xml: "application/xml, text/xml",
21910			json: "application/json, text/javascript"
21911		},
21912
21913		contents: {
21914			xml: /\bxml\b/,
21915			html: /\bhtml/,
21916			json: /\bjson\b/
21917		},
21918
21919		responseFields: {
21920			xml: "responseXML",
21921			text: "responseText",
21922			json: "responseJSON"
21923		},
21924
21925		// Data converters
21926		// Keys separate source (or catchall "*") and destination types with a single space
21927		converters: {
21928
21929			// Convert anything to text
21930			"* text": String,
21931
21932			// Text to html (true = no transformation)
21933			"text html": true,
21934
21935			// Evaluate text as a json expression
21936			"text json": JSON.parse,
21937
21938			// Parse text as xml
21939			"text xml": jQuery.parseXML
21940		},
21941
21942		// For options that shouldn't be deep extended:
21943		// you can add your own custom options here if
21944		// and when you create one that shouldn't be
21945		// deep extended (see ajaxExtend)
21946		flatOptions: {
21947			url: true,
21948			context: true
21949		}
21950	},
21951
21952	// Creates a full fledged settings object into target
21953	// with both ajaxSettings and settings fields.
21954	// If target is omitted, writes into ajaxSettings.
21955	ajaxSetup: function( target, settings ) {
21956		return settings ?
21957
21958			// Building a settings object
21959			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
21960
21961			// Extending ajaxSettings
21962			ajaxExtend( jQuery.ajaxSettings, target );
21963	},
21964
21965	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
21966	ajaxTransport: addToPrefiltersOrTransports( transports ),
21967
21968	// Main method
21969	ajax: function( url, options ) {
21970
21971		// If url is an object, simulate pre-1.5 signature
21972		if ( typeof url === "object" ) {
21973			options = url;
21974			url = undefined;
21975		}
21976
21977		// Force options to be an object
21978		options = options || {};
21979
21980		var transport,
21981
21982			// URL without anti-cache param
21983			cacheURL,
21984
21985			// Response headers
21986			responseHeadersString,
21987			responseHeaders,
21988
21989			// timeout handle
21990			timeoutTimer,
21991
21992			// Url cleanup var
21993			urlAnchor,
21994
21995			// Request state (becomes false upon send and true upon completion)
21996			completed,
21997
21998			// To know if global events are to be dispatched
21999			fireGlobals,
22000
22001			// Loop variable
22002			i,
22003
22004			// uncached part of the url
22005			uncached,
22006
22007			// Create the final options object
22008			s = jQuery.ajaxSetup( {}, options ),
22009
22010			// Callbacks context
22011			callbackContext = s.context || s,
22012
22013			// Context for global events is callbackContext if it is a DOM node or jQuery collection
22014			globalEventContext = s.context &&
22015				( callbackContext.nodeType || callbackContext.jquery ) ?
22016				jQuery( callbackContext ) :
22017				jQuery.event,
22018
22019			// Deferreds
22020			deferred = jQuery.Deferred(),
22021			completeDeferred = jQuery.Callbacks( "once memory" ),
22022
22023			// Status-dependent callbacks
22024			statusCode = s.statusCode || {},
22025
22026			// Headers (they are sent all at once)
22027			requestHeaders = {},
22028			requestHeadersNames = {},
22029
22030			// Default abort message
22031			strAbort = "canceled",
22032
22033			// Fake xhr
22034			jqXHR = {
22035				readyState: 0,
22036
22037				// Builds headers hashtable if needed
22038				getResponseHeader: function( key ) {
22039					var match;
22040					if ( completed ) {
22041						if ( !responseHeaders ) {
22042							responseHeaders = {};
22043							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22044								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
22045									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
22046										.concat( match[ 2 ] );
22047							}
22048						}
22049						match = responseHeaders[ key.toLowerCase() + " " ];
22050					}
22051					return match == null ? null : match.join( ", " );
22052				},
22053
22054				// Raw string
22055				getAllResponseHeaders: function() {
22056					return completed ? responseHeadersString : null;
22057				},
22058
22059				// Caches the header
22060				setRequestHeader: function( name, value ) {
22061					if ( completed == null ) {
22062						name = requestHeadersNames[ name.toLowerCase() ] =
22063							requestHeadersNames[ name.toLowerCase() ] || name;
22064						requestHeaders[ name ] = value;
22065					}
22066					return this;
22067				},
22068
22069				// Overrides response content-type header
22070				overrideMimeType: function( type ) {
22071					if ( completed == null ) {
22072						s.mimeType = type;
22073					}
22074					return this;
22075				},
22076
22077				// Status-dependent callbacks
22078				statusCode: function( map ) {
22079					var code;
22080					if ( map ) {
22081						if ( completed ) {
22082
22083							// Execute the appropriate callbacks
22084							jqXHR.always( map[ jqXHR.status ] );
22085						} else {
22086
22087							// Lazy-add the new callbacks in a way that preserves old ones
22088							for ( code in map ) {
22089								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22090							}
22091						}
22092					}
22093					return this;
22094				},
22095
22096				// Cancel the request
22097				abort: function( statusText ) {
22098					var finalText = statusText || strAbort;
22099					if ( transport ) {
22100						transport.abort( finalText );
22101					}
22102					done( 0, finalText );
22103					return this;
22104				}
22105			};
22106
22107		// Attach deferreds
22108		deferred.promise( jqXHR );
22109
22110		// Add protocol if not provided (prefilters might expect it)
22111		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
22112		// We also use the url parameter if available
22113		s.url = ( ( url || s.url || location.href ) + "" )
22114			.replace( rprotocol, location.protocol + "//" );
22115
22116		// Alias method option to type as per ticket trac-12004
22117		s.type = options.method || options.type || s.method || s.type;
22118
22119		// Extract dataTypes list
22120		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
22121
22122		// A cross-domain request is in order when the origin doesn't match the current origin.
22123		if ( s.crossDomain == null ) {
22124			urlAnchor = document.createElement( "a" );
22125
22126			// Support: IE <=8 - 11, Edge 12 - 15
22127			// IE throws exception on accessing the href property if url is malformed,
22128			// e.g. http://example.com:80x/
22129			try {
22130				urlAnchor.href = s.url;
22131
22132				// Support: IE <=8 - 11 only
22133				// Anchor's host property isn't correctly set when s.url is relative
22134				urlAnchor.href = urlAnchor.href;
22135				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
22136					urlAnchor.protocol + "//" + urlAnchor.host;
22137			} catch ( e ) {
22138
22139				// If there is an error parsing the URL, assume it is crossDomain,
22140				// it can be rejected by the transport if it is invalid
22141				s.crossDomain = true;
22142			}
22143		}
22144
22145		// Convert data if not already a string
22146		if ( s.data && s.processData && typeof s.data !== "string" ) {
22147			s.data = jQuery.param( s.data, s.traditional );
22148		}
22149
22150		// Apply prefilters
22151		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
22152
22153		// If request was aborted inside a prefilter, stop there
22154		if ( completed ) {
22155			return jqXHR;
22156		}
22157
22158		// We can fire global events as of now if asked to
22159		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
22160		fireGlobals = jQuery.event && s.global;
22161
22162		// Watch for a new set of requests
22163		if ( fireGlobals && jQuery.active++ === 0 ) {
22164			jQuery.event.trigger( "ajaxStart" );
22165		}
22166
22167		// Uppercase the type
22168		s.type = s.type.toUpperCase();
22169
22170		// Determine if request has content
22171		s.hasContent = !rnoContent.test( s.type );
22172
22173		// Save the URL in case we're toying with the If-Modified-Since
22174		// and/or If-None-Match header later on
22175		// Remove hash to simplify url manipulation
22176		cacheURL = s.url.replace( rhash, "" );
22177
22178		// More options handling for requests with no content
22179		if ( !s.hasContent ) {
22180
22181			// Remember the hash so we can put it back
22182			uncached = s.url.slice( cacheURL.length );
22183
22184			// If data is available and should be processed, append data to url
22185			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
22186				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
22187
22188				// trac-9682: remove data so that it's not used in an eventual retry
22189				delete s.data;
22190			}
22191
22192			// Add or update anti-cache param if needed
22193			if ( s.cache === false ) {
22194				cacheURL = cacheURL.replace( rantiCache, "$1" );
22195				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
22196					uncached;
22197			}
22198
22199			// Put hash and anti-cache on the URL that will be requested (gh-1732)
22200			s.url = cacheURL + uncached;
22201
22202		// Change '%20' to '+' if this is encoded form body content (gh-2658)
22203		} else if ( s.data && s.processData &&
22204			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
22205			s.data = s.data.replace( r20, "+" );
22206		}
22207
22208		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
22209		if ( s.ifModified ) {
22210			if ( jQuery.lastModified[ cacheURL ] ) {
22211				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
22212			}
22213			if ( jQuery.etag[ cacheURL ] ) {
22214				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
22215			}
22216		}
22217
22218		// Set the correct header, if data is being sent
22219		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
22220			jqXHR.setRequestHeader( "Content-Type", s.contentType );
22221		}
22222
22223		// Set the Accepts header for the server, depending on the dataType
22224		jqXHR.setRequestHeader(
22225			"Accept",
22226			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
22227				s.accepts[ s.dataTypes[ 0 ] ] +
22228					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
22229				s.accepts[ "*" ]
22230		);
22231
22232		// Check for headers option
22233		for ( i in s.headers ) {
22234			jqXHR.setRequestHeader( i, s.headers[ i ] );
22235		}
22236
22237		// Allow custom headers/mimetypes and early abort
22238		if ( s.beforeSend &&
22239			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
22240
22241			// Abort if not done already and return
22242			return jqXHR.abort();
22243		}
22244
22245		// Aborting is no longer a cancellation
22246		strAbort = "abort";
22247
22248		// Install callbacks on deferreds
22249		completeDeferred.add( s.complete );
22250		jqXHR.done( s.success );
22251		jqXHR.fail( s.error );
22252
22253		// Get transport
22254		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
22255
22256		// If no transport, we auto-abort
22257		if ( !transport ) {
22258			done( -1, "No Transport" );
22259		} else {
22260			jqXHR.readyState = 1;
22261
22262			// Send global event
22263			if ( fireGlobals ) {
22264				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
22265			}
22266
22267			// If request was aborted inside ajaxSend, stop there
22268			if ( completed ) {
22269				return jqXHR;
22270			}
22271
22272			// Timeout
22273			if ( s.async && s.timeout > 0 ) {
22274				timeoutTimer = window.setTimeout( function() {
22275					jqXHR.abort( "timeout" );
22276				}, s.timeout );
22277			}
22278
22279			try {
22280				completed = false;
22281				transport.send( requestHeaders, done );
22282			} catch ( e ) {
22283
22284				// Rethrow post-completion exceptions
22285				if ( completed ) {
22286					throw e;
22287				}
22288
22289				// Propagate others as results
22290				done( -1, e );
22291			}
22292		}
22293
22294		// Callback for when everything is done
22295		function done( status, nativeStatusText, responses, headers ) {
22296			var isSuccess, success, error, response, modified,
22297				statusText = nativeStatusText;
22298
22299			// Ignore repeat invocations
22300			if ( completed ) {
22301				return;
22302			}
22303
22304			completed = true;
22305
22306			// Clear timeout if it exists
22307			if ( timeoutTimer ) {
22308				window.clearTimeout( timeoutTimer );
22309			}
22310
22311			// Dereference transport for early garbage collection
22312			// (no matter how long the jqXHR object will be used)
22313			transport = undefined;
22314
22315			// Cache response headers
22316			responseHeadersString = headers || "";
22317
22318			// Set readyState
22319			jqXHR.readyState = status > 0 ? 4 : 0;
22320
22321			// Determine if successful
22322			isSuccess = status >= 200 && status < 300 || status === 304;
22323
22324			// Get response data
22325			if ( responses ) {
22326				response = ajaxHandleResponses( s, jqXHR, responses );
22327			}
22328
22329			// Use a noop converter for missing script but not if jsonp
22330			if ( !isSuccess &&
22331				jQuery.inArray( "script", s.dataTypes ) > -1 &&
22332				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
22333				s.converters[ "text script" ] = function() {};
22334			}
22335
22336			// Convert no matter what (that way responseXXX fields are always set)
22337			response = ajaxConvert( s, response, jqXHR, isSuccess );
22338
22339			// If successful, handle type chaining
22340			if ( isSuccess ) {
22341
22342				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
22343				if ( s.ifModified ) {
22344					modified = jqXHR.getResponseHeader( "Last-Modified" );
22345					if ( modified ) {
22346						jQuery.lastModified[ cacheURL ] = modified;
22347					}
22348					modified = jqXHR.getResponseHeader( "etag" );
22349					if ( modified ) {
22350						jQuery.etag[ cacheURL ] = modified;
22351					}
22352				}
22353
22354				// if no content
22355				if ( status === 204 || s.type === "HEAD" ) {
22356					statusText = "nocontent";
22357
22358				// if not modified
22359				} else if ( status === 304 ) {
22360					statusText = "notmodified";
22361
22362				// If we have data, let's convert it
22363				} else {
22364					statusText = response.state;
22365					success = response.data;
22366					error = response.error;
22367					isSuccess = !error;
22368				}
22369			} else {
22370
22371				// Extract error from statusText and normalize for non-aborts
22372				error = statusText;
22373				if ( status || !statusText ) {
22374					statusText = "error";
22375					if ( status < 0 ) {
22376						status = 0;
22377					}
22378				}
22379			}
22380
22381			// Set data for the fake xhr object
22382			jqXHR.status = status;
22383			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
22384
22385			// Success/Error
22386			if ( isSuccess ) {
22387				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
22388			} else {
22389				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
22390			}
22391
22392			// Status-dependent callbacks
22393			jqXHR.statusCode( statusCode );
22394			statusCode = undefined;
22395
22396			if ( fireGlobals ) {
22397				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
22398					[ jqXHR, s, isSuccess ? success : error ] );
22399			}
22400
22401			// Complete
22402			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
22403
22404			if ( fireGlobals ) {
22405				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
22406
22407				// Handle the global AJAX counter
22408				if ( !( --jQuery.active ) ) {
22409					jQuery.event.trigger( "ajaxStop" );
22410				}
22411			}
22412		}
22413
22414		return jqXHR;
22415	},
22416
22417	getJSON: function( url, data, callback ) {
22418		return jQuery.get( url, data, callback, "json" );
22419	},
22420
22421	getScript: function( url, callback ) {
22422		return jQuery.get( url, undefined, callback, "script" );
22423	}
22424} );
22425
22426jQuery.each( [ "get", "post" ], function( _i, method ) {
22427	jQuery[ method ] = function( url, data, callback, type ) {
22428
22429		// Shift arguments if data argument was omitted
22430		if ( isFunction( data ) ) {
22431			type = type || callback;
22432			callback = data;
22433			data = undefined;
22434		}
22435
22436		// The url can be an options object (which then must have .url)
22437		return jQuery.ajax( jQuery.extend( {
22438			url: url,
22439			type: method,
22440			dataType: type,
22441			data: data,
22442			success: callback
22443		}, jQuery.isPlainObject( url ) && url ) );
22444	};
22445} );
22446
22447jQuery.ajaxPrefilter( function( s ) {
22448	var i;
22449	for ( i in s.headers ) {
22450		if ( i.toLowerCase() === "content-type" ) {
22451			s.contentType = s.headers[ i ] || "";
22452		}
22453	}
22454} );
22455
22456
22457jQuery._evalUrl = function( url, options, doc ) {
22458	return jQuery.ajax( {
22459		url: url,
22460
22461		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
22462		type: "GET",
22463		dataType: "script",
22464		cache: true,
22465		async: false,
22466		global: false,
22467
22468		// Only evaluate the response if it is successful (gh-4126)
22469		// dataFilter is not invoked for failure responses, so using it instead
22470		// of the default converter is kludgy but it works.
22471		converters: {
22472			"text script": function() {}
22473		},
22474		dataFilter: function( response ) {
22475			jQuery.globalEval( response, options, doc );
22476		}
22477	} );
22478};
22479
22480
22481jQuery.fn.extend( {
22482	wrapAll: function( html ) {
22483		var wrap;
22484
22485		if ( this[ 0 ] ) {
22486			if ( isFunction( html ) ) {
22487				html = html.call( this[ 0 ] );
22488			}
22489
22490			// The elements to wrap the target around
22491			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
22492
22493			if ( this[ 0 ].parentNode ) {
22494				wrap.insertBefore( this[ 0 ] );
22495			}
22496
22497			wrap.map( function() {
22498				var elem = this;
22499
22500				while ( elem.firstElementChild ) {
22501					elem = elem.firstElementChild;
22502				}
22503
22504				return elem;
22505			} ).append( this );
22506		}
22507
22508		return this;
22509	},
22510
22511	wrapInner: function( html ) {
22512		if ( isFunction( html ) ) {
22513			return this.each( function( i ) {
22514				jQuery( this ).wrapInner( html.call( this, i ) );
22515			} );
22516		}
22517
22518		return this.each( function() {
22519			var self = jQuery( this ),
22520				contents = self.contents();
22521
22522			if ( contents.length ) {
22523				contents.wrapAll( html );
22524
22525			} else {
22526				self.append( html );
22527			}
22528		} );
22529	},
22530
22531	wrap: function( html ) {
22532		var htmlIsFunction = isFunction( html );
22533
22534		return this.each( function( i ) {
22535			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
22536		} );
22537	},
22538
22539	unwrap: function( selector ) {
22540		this.parent( selector ).not( "body" ).each( function() {
22541			jQuery( this ).replaceWith( this.childNodes );
22542		} );
22543		return this;
22544	}
22545} );
22546
22547
22548jQuery.expr.pseudos.hidden = function( elem ) {
22549	return !jQuery.expr.pseudos.visible( elem );
22550};
22551jQuery.expr.pseudos.visible = function( elem ) {
22552	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
22553};
22554
22555
22556
22557
22558jQuery.ajaxSettings.xhr = function() {
22559	try {
22560		return new window.XMLHttpRequest();
22561	} catch ( e ) {}
22562};
22563
22564var xhrSuccessStatus = {
22565
22566		// File protocol always yields status code 0, assume 200
22567		0: 200,
22568
22569		// Support: IE <=9 only
22570		// trac-1450: sometimes IE returns 1223 when it should be 204
22571		1223: 204
22572	},
22573	xhrSupported = jQuery.ajaxSettings.xhr();
22574
22575support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
22576support.ajax = xhrSupported = !!xhrSupported;
22577
22578jQuery.ajaxTransport( function( options ) {
22579	var callback, errorCallback;
22580
22581	// Cross domain only allowed if supported through XMLHttpRequest
22582	if ( support.cors || xhrSupported && !options.crossDomain ) {
22583		return {
22584			send: function( headers, complete ) {
22585				var i,
22586					xhr = options.xhr();
22587
22588				xhr.open(
22589					options.type,
22590					options.url,
22591					options.async,
22592					options.username,
22593					options.password
22594				);
22595
22596				// Apply custom fields if provided
22597				if ( options.xhrFields ) {
22598					for ( i in options.xhrFields ) {
22599						xhr[ i ] = options.xhrFields[ i ];
22600					}
22601				}
22602
22603				// Override mime type if needed
22604				if ( options.mimeType && xhr.overrideMimeType ) {
22605					xhr.overrideMimeType( options.mimeType );
22606				}
22607
22608				// X-Requested-With header
22609				// For cross-domain requests, seeing as conditions for a preflight are
22610				// akin to a jigsaw puzzle, we simply never set it to be sure.
22611				// (it can always be set on a per-request basis or even using ajaxSetup)
22612				// For same-domain requests, won't change header if already provided.
22613				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
22614					headers[ "X-Requested-With" ] = "XMLHttpRequest";
22615				}
22616
22617				// Set headers
22618				for ( i in headers ) {
22619					xhr.setRequestHeader( i, headers[ i ] );
22620				}
22621
22622				// Callback
22623				callback = function( type ) {
22624					return function() {
22625						if ( callback ) {
22626							callback = errorCallback = xhr.onload =
22627								xhr.onerror = xhr.onabort = xhr.ontimeout =
22628									xhr.onreadystatechange = null;
22629
22630							if ( type === "abort" ) {
22631								xhr.abort();
22632							} else if ( type === "error" ) {
22633
22634								// Support: IE <=9 only
22635								// On a manual native abort, IE9 throws
22636								// errors on any property access that is not readyState
22637								if ( typeof xhr.status !== "number" ) {
22638									complete( 0, "error" );
22639								} else {
22640									complete(
22641
22642										// File: protocol always yields status 0; see trac-8605, trac-14207
22643										xhr.status,
22644										xhr.statusText
22645									);
22646								}
22647							} else {
22648								complete(
22649									xhrSuccessStatus[ xhr.status ] || xhr.status,
22650									xhr.statusText,
22651
22652									// Support: IE <=9 only
22653									// IE9 has no XHR2 but throws on binary (trac-11426)
22654									// For XHR2 non-text, let the caller handle it (gh-2498)
22655									( xhr.responseType || "text" ) !== "text"  ||
22656									typeof xhr.responseText !== "string" ?
22657										{ binary: xhr.response } :
22658										{ text: xhr.responseText },
22659									xhr.getAllResponseHeaders()
22660								);
22661							}
22662						}
22663					};
22664				};
22665
22666				// Listen to events
22667				xhr.onload = callback();
22668				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
22669
22670				// Support: IE 9 only
22671				// Use onreadystatechange to replace onabort
22672				// to handle uncaught aborts
22673				if ( xhr.onabort !== undefined ) {
22674					xhr.onabort = errorCallback;
22675				} else {
22676					xhr.onreadystatechange = function() {
22677
22678						// Check readyState before timeout as it changes
22679						if ( xhr.readyState === 4 ) {
22680
22681							// Allow onerror to be called first,
22682							// but that will not handle a native abort
22683							// Also, save errorCallback to a variable
22684							// as xhr.onerror cannot be accessed
22685							window.setTimeout( function() {
22686								if ( callback ) {
22687									errorCallback();
22688								}
22689							} );
22690						}
22691					};
22692				}
22693
22694				// Create the abort callback
22695				callback = callback( "abort" );
22696
22697				try {
22698
22699					// Do send the request (this may raise an exception)
22700					xhr.send( options.hasContent && options.data || null );
22701				} catch ( e ) {
22702
22703					// trac-14683: Only rethrow if this hasn't been notified as an error yet
22704					if ( callback ) {
22705						throw e;
22706					}
22707				}
22708			},
22709
22710			abort: function() {
22711				if ( callback ) {
22712					callback();
22713				}
22714			}
22715		};
22716	}
22717} );
22718
22719
22720
22721
22722// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
22723jQuery.ajaxPrefilter( function( s ) {
22724	if ( s.crossDomain ) {
22725		s.contents.script = false;
22726	}
22727} );
22728
22729// Install script dataType
22730jQuery.ajaxSetup( {
22731	accepts: {
22732		script: "text/javascript, application/javascript, " +
22733			"application/ecmascript, application/x-ecmascript"
22734	},
22735	contents: {
22736		script: /\b(?:java|ecma)script\b/
22737	},
22738	converters: {
22739		"text script": function( text ) {
22740			jQuery.globalEval( text );
22741			return text;
22742		}
22743	}
22744} );
22745
22746// Handle cache's special case and crossDomain
22747jQuery.ajaxPrefilter( "script", function( s ) {
22748	if ( s.cache === undefined ) {
22749		s.cache = false;
22750	}
22751	if ( s.crossDomain ) {
22752		s.type = "GET";
22753	}
22754} );
22755
22756// Bind script tag hack transport
22757jQuery.ajaxTransport( "script", function( s ) {
22758
22759	// This transport only deals with cross domain or forced-by-attrs requests
22760	if ( s.crossDomain || s.scriptAttrs ) {
22761		var script, callback;
22762		return {
22763			send: function( _, complete ) {
22764				script = jQuery( "<script>" )
22765					.attr( s.scriptAttrs || {} )
22766					.prop( { charset: s.scriptCharset, src: s.url } )
22767					.on( "load error", callback = function( evt ) {
22768						script.remove();
22769						callback = null;
22770						if ( evt ) {
22771							complete( evt.type === "error" ? 404 : 200, evt.type );
22772						}
22773					} );
22774
22775				// Use native DOM manipulation to avoid our domManip AJAX trickery
22776				document.head.appendChild( script[ 0 ] );
22777			},
22778			abort: function() {
22779				if ( callback ) {
22780					callback();
22781				}
22782			}
22783		};
22784	}
22785} );
22786
22787
22788
22789
22790var oldCallbacks = [],
22791	rjsonp = /(=)\?(?=&|$)|\?\?/;
22792
22793// Default jsonp settings
22794jQuery.ajaxSetup( {
22795	jsonp: "callback",
22796	jsonpCallback: function() {
22797		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
22798		this[ callback ] = true;
22799		return callback;
22800	}
22801} );
22802
22803// Detect, normalize options and install callbacks for jsonp requests
22804jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
22805
22806	var callbackName, overwritten, responseContainer,
22807		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
22808			"url" :
22809			typeof s.data === "string" &&
22810				( s.contentType || "" )
22811					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
22812				rjsonp.test( s.data ) && "data"
22813		);
22814
22815	// Handle iff the expected data type is "jsonp" or we have a parameter to set
22816	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
22817
22818		// Get callback name, remembering preexisting value associated with it
22819		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
22820			s.jsonpCallback() :
22821			s.jsonpCallback;
22822
22823		// Insert callback into url or form data
22824		if ( jsonProp ) {
22825			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
22826		} else if ( s.jsonp !== false ) {
22827			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
22828		}
22829
22830		// Use data converter to retrieve json after script execution
vendor: 2,987 bytes, lines 22831-22940
22831		s.converters[ "script json" ] = function() {
22832			if ( !responseContainer ) {
22833				jQuery.error( callbackName + " was not called" );
22834			}
22835			return responseContainer[ 0 ];
22836		};
22837
22838		// Force json dataType
22839		s.dataTypes[ 0 ] = "json";
22840
22841		// Install callback
22842		overwritten = window[ callbackName ];
22843		window[ callbackName ] = function() {
22844			responseContainer = arguments;
22845		};
22846
22847		// Clean-up function (fires after converters)
22848		jqXHR.always( function() {
22849
22850			// If previous value didn't exist - remove it
22851			if ( overwritten === undefined ) {
22852				jQuery( window ).removeProp( callbackName );
22853
22854			// Otherwise restore preexisting value
22855			} else {
22856				window[ callbackName ] = overwritten;
22857			}
22858
22859			// Save back as free
22860			if ( s[ callbackName ] ) {
22861
22862				// Make sure that re-using the options doesn't screw things around
22863				s.jsonpCallback = originalSettings.jsonpCallback;
22864
22865				// Save the callback name for future use
22866				oldCallbacks.push( callbackName );
22867			}
22868
22869			// Call if it was a function and we have a response
22870			if ( responseContainer && isFunction( overwritten ) ) {
22871				overwritten( responseContainer[ 0 ] );
22872			}
22873
22874			responseContainer = overwritten = undefined;
22875		} );
22876
22877		// Delegate to script
22878		return "script";
22879	}
22880} );
22881
22882
22883
22884
22885// Support: Safari 8 only
22886// In Safari 8 documents created via document.implementation.createHTMLDocument
22887// collapse sibling forms: the second one becomes a child of the first one.
22888// Because of that, this security measure has to be disabled in Safari 8.
22889// https://bugs.webkit.org/show_bug.cgi?id=137337
22890support.createHTMLDocument = ( function() {
22891	var body = document.implementation.createHTMLDocument( "" ).body;
22892	body.innerHTML = "<form></form><form></form>";
22893	return body.childNodes.length === 2;
22894} )();
22895
22896
22897// Argument "data" should be string of html
22898// context (optional): If specified, the fragment will be created in this context,
22899// defaults to document
22900// keepScripts (optional): If true, will include scripts passed in the html string
22901jQuery.parseHTML = function( data, context, keepScripts ) {
22902	if ( typeof data !== "string" ) {
22903		return [];
22904	}
22905	if ( typeof context === "boolean" ) {
22906		keepScripts = context;
22907		context = false;
22908	}
22909
22910	var base, parsed, scripts;
22911
22912	if ( !context ) {
22913
22914		// Stop scripts or inline event handlers from being executed immediately
22915		// by using document.implementation
22916		if ( support.createHTMLDocument ) {
22917			context = document.implementation.createHTMLDocument( "" );
22918
22919			// Set the base href for the created document
22920			// so any parsed elements with URLs
22921			// are based on the document's URL (gh-2965)
22922			base = context.createElement( "base" );
22923			base.href = document.location.href;
22924			context.head.appendChild( base );
22925		} else {
22926			context = document;
22927		}
22928	}
22929
22930	parsed = rsingleTag.exec( data );
22931	scripts = !keepScripts && [];
22932
22933	// Single tag
22934	if ( parsed ) {
22935		return [ context.createElement( parsed[ 1 ] ) ];
22936	}
22937
22938	parsed = buildFragment( [ data ], context, scripts );
22939
22940	if ( scripts && scripts.length ) {
vendor: 10,712 bytes, lines 22941-23323
22941		jQuery( scripts ).remove();
22942	}
22943
22944	return jQuery.merge( [], parsed.childNodes );
22945};
22946
22947
22948/**
22949 * Load a url into a page
22950 */
22951jQuery.fn.load = function( url, params, callback ) {
22952	var selector, type, response,
22953		self = this,
22954		off = url.indexOf( " " );
22955
22956	if ( off > -1 ) {
22957		selector = stripAndCollapse( url.slice( off ) );
22958		url = url.slice( 0, off );
22959	}
22960
22961	// If it's a function
22962	if ( isFunction( params ) ) {
22963
22964		// We assume that it's the callback
22965		callback = params;
22966		params = undefined;
22967
22968	// Otherwise, build a param string
22969	} else if ( params && typeof params === "object" ) {
22970		type = "POST";
22971	}
22972
22973	// If we have elements to modify, make the request
22974	if ( self.length > 0 ) {
22975		jQuery.ajax( {
22976			url: url,
22977
22978			// If "type" variable is undefined, then "GET" method will be used.
22979			// Make value of this field explicit since
22980			// user can override it through ajaxSetup method
22981			type: type || "GET",
22982			dataType: "html",
22983			data: params
22984		} ).done( function( responseText ) {
22985
22986			// Save response for use in complete callback
22987			response = arguments;
22988
22989			self.html( selector ?
22990
22991				// If a selector was specified, locate the right elements in a dummy div
22992				// Exclude scripts to avoid IE 'Permission Denied' errors
22993				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
22994
22995				// Otherwise use the full result
22996				responseText );
22997
22998		// If the request succeeds, this function gets "data", "status", "jqXHR"
22999		// but they are ignored because response was set above.
23000		// If it fails, this function gets "jqXHR", "status", "error"
23001		} ).always( callback && function( jqXHR, status ) {
23002			self.each( function() {
23003				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23004			} );
23005		} );
23006	}
23007
23008	return this;
23009};
23010
23011
23012
23013
23014jQuery.expr.pseudos.animated = function( elem ) {
23015	return jQuery.grep( jQuery.timers, function( fn ) {
23016		return elem === fn.elem;
23017	} ).length;
23018};
23019
23020
23021
23022
23023jQuery.offset = {
23024	setOffset: function( elem, options, i ) {
23025		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23026			position = jQuery.css( elem, "position" ),
23027			curElem = jQuery( elem ),
23028			props = {};
23029
23030		// Set position first, in-case top/left are set even on static elem
23031		if ( position === "static" ) {
23032			elem.style.position = "relative";
23033		}
23034
23035		curOffset = curElem.offset();
23036		curCSSTop = jQuery.css( elem, "top" );
23037		curCSSLeft = jQuery.css( elem, "left" );
23038		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23039			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23040
23041		// Need to be able to calculate position if either
23042		// top or left is auto and position is either absolute or fixed
23043		if ( calculatePosition ) {
23044			curPosition = curElem.position();
23045			curTop = curPosition.top;
23046			curLeft = curPosition.left;
23047
23048		} else {
23049			curTop = parseFloat( curCSSTop ) || 0;
23050			curLeft = parseFloat( curCSSLeft ) || 0;
23051		}
23052
23053		if ( isFunction( options ) ) {
23054
23055			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23056			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23057		}
23058
23059		if ( options.top != null ) {
23060			props.top = ( options.top - curOffset.top ) + curTop;
23061		}
23062		if ( options.left != null ) {
23063			props.left = ( options.left - curOffset.left ) + curLeft;
23064		}
23065
23066		if ( "using" in options ) {
23067			options.using.call( elem, props );
23068
23069		} else {
23070			curElem.css( props );
23071		}
23072	}
23073};
23074
23075jQuery.fn.extend( {
23076
23077	// offset() relates an element's border box to the document origin
23078	offset: function( options ) {
23079
23080		// Preserve chaining for setter
23081		if ( arguments.length ) {
23082			return options === undefined ?
23083				this :
23084				this.each( function( i ) {
23085					jQuery.offset.setOffset( this, options, i );
23086				} );
23087		}
23088
23089		var rect, win,
23090			elem = this[ 0 ];
23091
23092		if ( !elem ) {
23093			return;
23094		}
23095
23096		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23097		// Support: IE <=11 only
23098		// Running getBoundingClientRect on a
23099		// disconnected node in IE throws an error
23100		if ( !elem.getClientRects().length ) {
23101			return { top: 0, left: 0 };
23102		}
23103
23104		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
23105		rect = elem.getBoundingClientRect();
23106		win = elem.ownerDocument.defaultView;
23107		return {
23108			top: rect.top + win.pageYOffset,
23109			left: rect.left + win.pageXOffset
23110		};
23111	},
23112
23113	// position() relates an element's margin box to its offset parent's padding box
23114	// This corresponds to the behavior of CSS absolute positioning
23115	position: function() {
23116		if ( !this[ 0 ] ) {
23117			return;
23118		}
23119
23120		var offsetParent, offset, doc,
23121			elem = this[ 0 ],
23122			parentOffset = { top: 0, left: 0 };
23123
23124		// position:fixed elements are offset from the viewport, which itself always has zero offset
23125		if ( jQuery.css( elem, "position" ) === "fixed" ) {
23126
23127			// Assume position:fixed implies availability of getBoundingClientRect
23128			offset = elem.getBoundingClientRect();
23129
23130		} else {
23131			offset = this.offset();
23132
23133			// Account for the *real* offset parent, which can be the document or its root element
23134			// when a statically positioned element is identified
23135			doc = elem.ownerDocument;
23136			offsetParent = elem.offsetParent || doc.documentElement;
23137			while ( offsetParent &&
23138				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
23139				jQuery.css( offsetParent, "position" ) === "static" ) {
23140
23141				offsetParent = offsetParent.parentNode;
23142			}
23143			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
23144
23145				// Incorporate borders into its offset, since they are outside its content origin
23146				parentOffset = jQuery( offsetParent ).offset();
23147				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
23148				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
23149			}
23150		}
23151
23152		// Subtract parent offsets and element margins
23153		return {
23154			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
23155			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
23156		};
23157	},
23158
23159	// This method will return documentElement in the following cases:
23160	// 1) For the element inside the iframe without offsetParent, this method will return
23161	//    documentElement of the parent window
23162	// 2) For the hidden or detached element
23163	// 3) For body or html element, i.e. in case of the html node - it will return itself
23164	//
23165	// but those exceptions were never presented as a real life use-cases
23166	// and might be considered as more preferable results.
23167	//
23168	// This logic, however, is not guaranteed and can change at any point in the future
23169	offsetParent: function() {
23170		return this.map( function() {
23171			var offsetParent = this.offsetParent;
23172
23173			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
23174				offsetParent = offsetParent.offsetParent;
23175			}
23176
23177			return offsetParent || documentElement;
23178		} );
23179	}
23180} );
23181
23182// Create scrollLeft and scrollTop methods
23183jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
23184	var top = "pageYOffset" === prop;
23185
23186	jQuery.fn[ method ] = function( val ) {
23187		return access( this, function( elem, method, val ) {
23188
23189			// Coalesce documents and windows
23190			var win;
23191			if ( isWindow( elem ) ) {
23192				win = elem;
23193			} else if ( elem.nodeType === 9 ) {
23194				win = elem.defaultView;
23195			}
23196
23197			if ( val === undefined ) {
23198				return win ? win[ prop ] : elem[ method ];
23199			}
23200
23201			if ( win ) {
23202				win.scrollTo(
23203					!top ? val : win.pageXOffset,
23204					top ? val : win.pageYOffset
23205				);
23206
23207			} else {
23208				elem[ method ] = val;
23209			}
23210		}, method, val, arguments.length );
23211	};
23212} );
23213
23214// Support: Safari <=7 - 9.1, Chrome <=37 - 49
23215// Add the top/left cssHooks using jQuery.fn.position
23216// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
23217// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
23218// getComputedStyle returns percent when specified for top/left/bottom/right;
23219// rather than make the css module depend on the offset module, just check for it here
23220jQuery.each( [ "top", "left" ], function( _i, prop ) {
23221	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
23222		function( elem, computed ) {
23223			if ( computed ) {
23224				computed = curCSS( elem, prop );
23225
23226				// If curCSS returns percentage, fallback to offset
23227				return rnumnonpx.test( computed ) ?
23228					jQuery( elem ).position()[ prop ] + "px" :
23229					computed;
23230			}
23231		}
23232	);
23233} );
23234
23235
23236// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
23237jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
23238	jQuery.each( {
23239		padding: "inner" + name,
23240		content: type,
23241		"": "outer" + name
23242	}, function( defaultExtra, funcName ) {
23243
23244		// Margin is only for outerHeight, outerWidth
23245		jQuery.fn[ funcName ] = function( margin, value ) {
23246			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
23247				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
23248
23249			return access( this, function( elem, type, value ) {
23250				var doc;
23251
23252				if ( isWindow( elem ) ) {
23253
23254					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
23255					return funcName.indexOf( "outer" ) === 0 ?
23256						elem[ "inner" + name ] :
23257						elem.document.documentElement[ "client" + name ];
23258				}
23259
23260				// Get document width or height
23261				if ( elem.nodeType === 9 ) {
23262					doc = elem.documentElement;
23263
23264					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
23265					// whichever is greatest
23266					return Math.max(
23267						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
23268						elem.body[ "offset" + name ], doc[ "offset" + name ],
23269						doc[ "client" + name ]
23270					);
23271				}
23272
23273				return value === undefined ?
23274
23275					// Get width or height on the element, requesting but not forcing parseFloat
23276					jQuery.css( elem, type, extra ) :
23277
23278					// Set width or height on the element
23279					jQuery.style( elem, type, value, extra );
23280			}, type, chainable ? margin : undefined, chainable );
23281		};
23282	} );
23283} );
23284
23285
23286jQuery.each( [
23287	"ajaxStart",
23288	"ajaxStop",
23289	"ajaxComplete",
23290	"ajaxError",
23291	"ajaxSuccess",
23292	"ajaxSend"
23293], function( _i, type ) {
23294	jQuery.fn[ type ] = function( fn ) {
23295		return this.on( type, fn );
23296	};
23297} );
23298
23299
23300
23301
23302jQuery.fn.extend( {
23303
23304	bind: function( types, data, fn ) {
23305		return this.on( types, null, data, fn );
23306	},
23307	unbind: function( types, fn ) {
23308		return this.off( types, null, fn );
23309	},
23310
23311	delegate: function( selector, types, data, fn ) {
23312		return this.on( types, selector, data, fn );
23313	},
23314	undelegate: function( selector, types, fn ) {
23315
23316		// ( namespace ) or ( selector, types [, fn] )
23317		return arguments.length === 1 ?
23318			this.off( selector, "**" ) :
23319			this.off( types, selector || "**", fn );
23320	},
23321
23322	hover: function( fnOver, fnOut ) {
23323		return this
vendor: 2,565 bytes, lines 23323-23415
23323.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
23324	}
23325} );
23326
23327jQuery.each(
23328	( "blur focus focusin focusout resize scroll click dblclick " +
23329	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
23330	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
23331	function( _i, name ) {
23332
23333		// Handle event binding
23334		jQuery.fn[ name ] = function( data, fn ) {
23335			return arguments.length > 0 ?
23336				this.on( name, null, data, fn ) :
23337				this.trigger( name );
23338		};
23339	}
23340);
23341
23342
23343
23344
23345// Support: Android <=4.0 only
23346// Make sure we trim BOM and NBSP
23347// Require that the "whitespace run" starts from a non-whitespace
23348// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
23349var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
23350
23351// Bind a function to a context, optionally partially applying any
23352// arguments.
23353// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
23354// However, it is not slated for removal any time soon
23355jQuery.proxy = function( fn, context ) {
23356	var tmp, args, proxy;
23357
23358	if ( typeof context === "string" ) {
23359		tmp = fn[ context ];
23360		context = fn;
23361		fn = tmp;
23362	}
23363
23364	// Quick check to determine if target is callable, in the spec
23365	// this throws a TypeError, but we will just return undefined.
23366	if ( !isFunction( fn ) ) {
23367		return undefined;
23368	}
23369
23370	// Simulated bind
23371	args = slice.call( arguments, 2 );
23372	proxy = function() {
23373		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
23374	};
23375
23376	// Set the guid of unique handler to the same of original handler, so it can be removed
23377	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
23378
23379	return proxy;
23380};
23381
23382jQuery.holdReady = function( hold ) {
23383	if ( hold ) {
23384		jQuery.readyWait++;
23385	} else {
23386		jQuery.ready( true );
23387	}
23388};
23389jQuery.isArray = Array.isArray;
23390jQuery.parseJSON = JSON.parse;
23391jQuery.nodeName = nodeName;
23392jQuery.isFunction = isFunction;
23393jQuery.isWindow = isWindow;
23394jQuery.camelCase = camelCase;
23395jQuery.type = toType;
23396
23397jQuery.now = Date.now;
23398
23399jQuery.isNumeric = function( obj ) {
23400
23401	// As of jQuery 3.0, isNumeric is limited to
23402	// strings and numbers (primitives or objects)
23403	// that can be coerced to finite numbers (gh-2662)
23404	var type = jQuery.type( obj );
23405	return ( type === "number" || type === "string" ) &&
23406
23407		// parseFloat NaNs numeric-cast false positives ("")
23408		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
23409		// subtraction forces infinities to NaN
23410		!isNaN( obj - parseFloat( obj ) );
23411};
23412
23413jQuery.trim = function( text ) {
23414	return text == null ?
23415		"" :
23416		( text + "" ).replace( rtrim, "$1" );
23417};
23418
23419
23420
23421// Register as a named AMD module, since jQuery can be concatenated with other
23422// files that may use define, but not via a proper concatenation script that
23423// understands anonymous AMD modules. A named AMD is safest and most robust
23424// way to register. Lowercase jquery is used because AMD module names are
23425// derived from file names, and jQuery is normally delivered in a lowercase
23426// file name. Do this after creating the global so that if an AMD module wants
23427// to call noConflict to hide this version of jQuery, it will work.
23428
23429// Note that for maximum portability, libraries that are not jQuery should
23430// declare themselves as anonymous modules, and avoid setting a global if an
23431// AMD loader is present. jQuery is a special case. For more information, see
23432// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
23433
23434if ( typeof define === "function" && define.amd ) {
23435	define( "jquery", [], function() {
23436		return jQuery;
23437	} );
23438}
23439
23440
23441
23442
23443var
23444
23445	// Map over jQuery in case of overwrite
23446	_jQuery = window.jQuery,
23447
23448	// Map over the $ in case of overwrite
23449	_$ = window.$;
23450
23451jQuery.noConflict = function( deep ) {
23452	if ( window.$ === jQuery ) {
23453		window.$ = _$;
23454	}
23455
23456	if ( deep && window.jQuery === jQuery ) {
23457		window.jQuery = _jQuery;
23458	}
23459
23460	return jQuery;
23461};
23462
23463// Expose jQuery and $ identifiers, even in AMD
23464// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
23465// and CommonJS for browser emulators (trac-13566)
23466if ( typeof noGlobal === "undefined" ) {
23467	window.jQuery = window.$ = jQuery;
23468}
23469
23470
23471
23472
23473return jQuery;
23474} );
vendor: 21,195 bytes, lines 23475-23479
23475/*
23476 Copyright (C) Federico Zivolo 2020
23477 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
23478 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=e.ownerDocument.defaultView,n=o.getComputedStyle(e,null);return t?n[t]:n}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function i(e){return e&&e.referenceNode?e.referenceNode:e}function r(e){return 11===e?re:10===e?pe:re||pe}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent||null;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TH','TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',n=e.nodeName;if('BODY'===n||'HTML'===n){var i=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||i;return r[o]}return e[o]}function f(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],n=l(t,'top'),i=l(t,'left'),r=o?-1:1;return e.top+=n*r,e.bottom+=n*r,e.left+=i*r,e.right+=i*r,e}function m(e,t){var o='x'===t?'Left':'Top',n='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'])+parseFloat(e['border'+n+'Width'])}function h(e,t,o,n){return ee(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],r(10)?parseInt(o['offset'+e])+parseInt(n['margin'+('Height'===e?'Top':'Left')])+parseInt(n['margin'+('Height'===e?'Bottom':'Right')]):0)}function c(e){var t=e.body,o=e.documentElement,n=r(10)&&getComputedStyle(o);return{height:h('Height',t,o,n),width:h('Width',t,o,n)}}function g(e){return le({},e,{right:e.left+e.width,bottom:e.top+e.height})}function u(e){var o={};try{if(r(10)){o=e.getBoundingClientRect();var n=l(e,'top'),i=l(e,'left');o.top+=n,o.left+=i,o.bottom+=n,o.right+=i}else o=e.getBoundingClientRect()}catch(t){}var p={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},s='HTML'===e.nodeName?c(e.ownerDocument):{},d=s.width||e.clientWidth||p.width,a=s.height||e.clientHeight||p.height,f=e.offsetWidth-d,h=e.offsetHeight-a;if(f||h){var u=t(e);f-=m(u,'x'),h-=m(u,'y'),p.width-=f,p.height-=h}return g(p)}function b(e,o){var i=2<arguments.length&&void 0!==arguments[2]&&arguments[2],p=r(10),s='HTML'===o.nodeName,d=u(e),a=u(o),l=n(e),m=t(o),h=parseFloat(m.borderTopWidth),c=parseFloat(m.borderLeftWidth);i&&s&&(a.top=ee(a.top,0),a.left=ee(a.left,0));var b=g({top:d.top-a.top-h,left:d.left-a.left-c,width:d.width,height:d.height});if(b.marginTop=0,b.marginLeft=0,!p&&s){var w=parseFloat(m.marginTop),y=parseFloat(m.marginLeft);b.top-=h-w,b.bottom-=h-w,b.left-=c-y,b.right-=c-y,b.marginTop=w,b.marginLeft=y}return(p&&!i?o.contains(l):o===l&&'BODY'!==l.nodeName)&&(b=f(b,o)),b}function w(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=e.ownerDocument.documentElement,n=b(e,o),i=ee(o.clientWidth,window.innerWidth||0),r=ee(o.clientHeight,window.innerHeight||0),p=t?0:l(o),s=t?0:l(o,'left'),d={top:p-n.top+n.marginTop,left:s-n.left+n.marginLeft,width:i,height:r};return g(d)}function y(e){var n=e.nodeName;if('BODY'===n||'HTML'===n)return!1;if('fixed'===t(e,'position'))return!0;var i=o(e);return!!i&&y(i)}function E(e){if(!e||!e.parentElement||r())return document.documentElement;for(var o=e.parentElement;o&&'none'===t(o,'transform');)o=o.parentElement;return o||document.documentElement}function v(e,t,r,p){var s=4<arguments.length&&void 0!==arguments[4]&&arguments[4],d={top:0,left:0},l=s?E(e):a(e,i(t));if('viewport'===p)d=w(l,s);else{var f;'scrollParent'===p?(f=n(o(t)),'BODY'===f.nodeName&&(f=e.ownerDocument.documentElement)):'window'===p?f=e.ownerDocument.documentElement:f=p;var m=b(f,l,s);if('HTML'===f.nodeName&&!y(l)){var h=c(e.ownerDocument),g=h.height,u=h.width;d.top+=m.top-m.marginTop,d.bottom=g+m.top,d.left+=m.left-m.marginLeft,d.right=u+m.left}else d=m}r=r||0;var v='number'==typeof r;return d.left+=v?r:r.left||0,d.top+=v?r:r.top||0,d.right-=v?r:r.right||0,d.bottom-=v?r:r.bottom||0,d}function x(e){var t=e.width,o=e.height;return t*o}function O(e,t,o,n,i){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=v(o,n,r,i),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return le({key:e},s[e],{area:x(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,n=e.height;return t>=o.clientWidth&&n>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function L(e,t,o){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,r=n?E(t):a(t,i(o));return b(o,r,n)}function S(e){var t=e.ownerDocument.defaultView,o=t.getComputedStyle(e),n=parseFloat(o.marginTop||0)+parseFloat(o.marginBottom||0),i=parseFloat(o.marginLeft||0)+parseFloat(o.marginRight||0),r={width:e.offsetWidth+i,height:e.offsetHeight+n};return r}function T(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function C(e,t,o){o=o.split('-')[0];var n=S(e),i={width:n.width,height:n.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return i[p]=t[p]+t[d]/2-n[d]/2,i[s]=o===s?t[s]-n[a]:t[T(s)],i}function D(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function N(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var n=D(e,function(e){return e[t]===o});return e.indexOf(n)}function P(t,o,n){var i=void 0===n?t:t.slice(0,N(t,'name',n));return i.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var n=t['function']||t.fn;t.enabled&&e(n)&&(o.offsets.popper=g(o.offsets.popper),o.offsets.reference=g(o.offsets.reference),o=n(o,t))}),o}function k(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=O(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=C(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?'fixed':'absolute',e=P(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function W(e,t){return e.some(function(e){var o=e.name,n=e.enabled;return n&&o===t})}function B(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function H(){return this.state.isDestroyed=!0,W(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.position='',this.popper.style.top='',this.popper.style.left='',this.popper.style.right='',this.popper.style.bottom='',this.popper.style.willChange='',this.popper.style[B('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function A(e){var t=e.ownerDocument;return t?t.defaultView:window}function M(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||M(n(p.parentNode),t,o,i),i.push(p)}function F(e,t,o,i){o.updateBound=i,A(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return M(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=F(this.reference,this.options,this.state,this.scheduleUpdate))}function R(e,t){return A(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function U(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=R(this.reference,this.state))}function Y(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function V(e,t){Object.keys(t).forEach(function(o){var n='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&Y(t[o])&&(n='px'),e.style[o]=t[o]+n})}function j(e,t){Object.keys(t).forEach(function(o){var n=t[o];!1===n?e.removeAttribute(o):e.setAttribute(o,t[o])})}function q(e,t){var o=e.offsets,n=o.popper,i=o.reference,r=$,p=function(e){return e},s=r(i.width),d=r(n.width),a=-1!==['left','right'].indexOf(e.placement),l=-1!==e.placement.indexOf('-'),f=t?a||l||s%2==d%2?r:Z:p,m=t?r:p;return{left:f(1==s%2&&1==d%2&&!l&&t?n.left-1:n.left),top:m(n.top),bottom:m(n.bottom),right:f(n.right)}}function K(e,t,o){var n=D(e,function(e){var o=e.name;return o===t}),i=!!n&&e.some(function(e){return e.name===o&&e.enabled&&e.order<n.order});if(!i){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return i}function z(e){return'end'===e?'start':'start'===e?'end':e}function G(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=he.indexOf(e),n=he.slice(o+1).concat(he.slice(0,o));return t?n.reverse():n}function _(e,t,o,n){var i=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+i[1],p=i[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=n;}var d=g(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?ee(document.documentElement.clientHeight,window.innerHeight||0):ee(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function X(e,t,o,n){var i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(D(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,n){var i=(1===n?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return _(e,i,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,n){Y(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function J(e,t){var o,n=t.offset,i=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=i.split('-')[0];return o=Y(+n)?[+n,0]:X(n,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}var Q=Math.min,Z=Math.floor,$=Math.round,ee=Math.max,te='undefined'!=typeof window&&'undefined'!=typeof document&&'undefined'!=typeof navigator,oe=function(){for(var e=['Edge','Trident','Firefox'],t=0;t<e.length;t+=1)if(te&&0<=navigator.userAgent.indexOf(e[t]))return 1;return 0}(),ne=te&&window.Promise,ie=ne?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},oe))}},re=te&&!!(window.MSInputMethodContext&&document.documentMode),pe=te&&/MSIE 10/.test(navigator.userAgent),se=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},de=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),ae=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},le=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var n in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},fe=te&&/Firefox/i.test(navigator.userAgent),me=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],he=me.slice(3),ce={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},ge=function(){function t(o,n){var i=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};se(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=ie(this.update.bind(this)),this.options=le({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(le({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){i.options.modifiers[e]=le({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return le({name:e},i.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return de(t,[{key:'update',value:function(){return k.call(this)}},{key:'destroy',value:function(){return H.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return U.call(this)}}]),t}();return ge.Utils=('undefined'==typeof window?global:window).PopperUtils,ge.placements=me,ge.Defaults={placement:'bottom',positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){var i=e.offsets,r=i.reference,p=i.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:ae({},d,r[d]),end:ae({},d,r[d]+r[a]-p[a])};e.offsets.popper=le({},p,l[n])}return e}},offset:{order:200,enabled:!0,fn:J,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||p(e.instance.popper);e.instance.reference===o&&(o=p(o));var n=B('transform'),i=e.instance.popper.style,r=i.top,s=i.left,d=i[n];i.top='',i.left='',i[n]='';var a=v(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);i.top=r,i.left=s,i[n]=d,t.boundaries=a;var l=t.priority,f=e.offsets.popper,m={primary:function(e){var o=f[e];return f[e]<a[e]&&!t.escapeWithReference&&(o=ee(f[e],a[e])),ae({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=f[o];return f[e]>a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(n[d])&&(e.offsets.popper[d]=r(n[d])-o[a]),o[d]>r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[c]-u)),d[m]+u>s[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f]),E=parseFloat(w['border'+f+'Width']),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,$(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ce.FLIP:p=[n,i];break;case ce.CLOCKWISE:p=G(n);break;case ce.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)<f(l.right)||'top'===n&&f(a.bottom)>f(l.top)||'bottom'===n&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u),E=!!t.flipVariationsByContent&&(w&&'start'===r&&c||w&&'end'===r&&h||!w&&'start'===r&&u||!w&&'end'===r&&g),v=y||E;(m||b||v)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),v&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport',flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,n=t.y,i=e.offsets.popper,r=D(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==r&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===r?t.gpuAcceleration:r,l=p(e.instance.popper),f=u(l),m={position:i.position},h=q(e,2>window.devicePixelRatio||!fe),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=B('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=le({},E,e.attributes),e.styles=le({},m,e.styles),e.arrowStyles=le({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return V(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&V(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),V(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ge});
23479/
23479*!
23480  * Bootstrap v4.6.2 (https://getbootstrap.com/)
23481  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
23482  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23483  */
23484(function (global, factory) {
23485  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
23486  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
23487  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
23488})(this, (function (exports, $, Popper) { 'use strict';
23489
23490  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23491
23492  var $__default = /*#__PURE__*/_interopDefaultLegacy($);
23493  var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
23494
23495  function _defineProperties(target, props) {
23496    for (var i = 0; i < props.length; i++) {
23497      var descriptor = props[i];
23498      descriptor.enumerable = descriptor.enumerable || false;
23499      descriptor.configurable = true;
23500      if ("value" in descriptor) descriptor.writable = true;
23501      Object.defineProperty(target, descriptor.key, descriptor);
23502    }
23503  }
23504
23505  function _createClass(Constructor, protoProps, staticProps) {
23506    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
23507    if (staticProps) _defineProperties(Constructor, staticProps);
23508    Object.defineProperty(Constructor, "prototype", {
23509      writable: false
23510    });
23511    return Constructor;
23512  }
23513
23514  function _extends() {
23515    _extends = Object.assign ? Object.assign.bind() : function (target) {
23516      for (var i = 1; i < arguments.length; i++) {
23517        var source = arguments[i];
23518
23519        for (var key in source) {
23520          if (Object.prototype.hasOwnProperty.call(source, key)) {
23521            target[key] = source[key];
23522          }
23523        }
23524      }
23525
23526      return target;
23527    };
23528    return _extends.apply(this, arguments);
23529  }
23530
23531  function _inheritsLoose(subClass, superClass) {
23532    subClass.prototype = Object.create(superClass.prototype);
23533    subClass.prototype.constructor = subClass;
23534
23535    _setPrototypeOf(subClass, superClass);
23536  }
23537
23538  function _setPrototypeOf(o, p) {
23539    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
23540      o.__proto__ = p;
23541      return o;
23542    };
23543    return _setPrototypeOf(o, p);
23544  }
23545
23546  /**
23547   * --------------------------------------------------------------------------
23548   * Bootstrap (v4.6.2): util.js
23549   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23550   * --------------------------------------------------------------------------
23551   */
23552  /**
23553   * Private TransitionEnd Helpers
23554   */
23555
23556  var TRANSITION_END = 'transitionend';
23557  var MAX_UID = 1000000;
23558  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
23559
23560  function toType(obj) {
23561    if (obj === null || typeof obj === 'undefined') {
23562      return "" + obj;
23563    }
23564
23565    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
23566  }
23567
23568  function getSpecialTransitionEndEvent() {
23569    return {
23570      bindType: TRANSITION_END,
23571      delegateType: TRANSITION_END,
23572      handle: function handle(event) {
23573        if ($__default["default"](event.target).is(this)) {
23574          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
23575        }
23576
23577        return undefined;
23578      }
23579    };
23580  }
23581
23582  function transitionEndEmulator(duration) {
23583    var _this = this;
23584
23585    var called = false;
23586    $__default["default"](this).one(Util.TRANSITION_END, function () {
23587      called = true;
23588    });
23589    setTimeout(function () {
23590      if (!called) {
23591        Util.triggerTransitionEnd(_this);
23592      }
23593    }, duration);
23594    return this;
23595  }
23596
23597  function setTransitionEndSupport() {
23598    $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
23599    $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
23600  }
23601  /**
23602   * Public Util API
23603   */
23604
23605
23606  var Util = {
23607    TRANSITION_END: 'bsTransitionEnd',
23608    getUID: function getUID(prefix) {
23609      do {
23610        // eslint-disable-next-line no-bitwise
23611        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
23612      } while (document.getElementById(prefix));
23613
23614      return prefix;
23615    },
23616    getSelectorFromElement: function getSelectorFromElement(element) {
23617      var selector = element.getAttribute('data-target');
23618
23619      if (!selector || selector === '#') {
23620        var hrefAttr = element.getAttribute('href');
23621        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
23622      }
23623
23624      try {
23625        return document.querySelector(selector) ? selector : null;
23626      } catch (_) {
23627        return null;
23628      }
23629    },
23630    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
23631      if (!element) {
23632        return 0;
23633      } // Get transition-duration of the element
23634
23635
23636      var transitionDuration = $__default["default"](element).css('transition-duration');
23637      var transitionDelay = $__default["default"](element).css('transition-delay');
23638      var floatTransitionDuration = parseFloat(transitionDuration);
23639      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
23640
23641      if (!floatTransitionDuration && !floatTransitionDelay) {
23642        return 0;
23643      } // If multiple durations are defined, take the first
23644
23645
23646      transitionDuration = transitionDuration.split(',')[0];
23647      transitionDelay = transitionDelay.split(',')[0];
23648      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
23649    },
23650    reflow: function reflow(element) {
23651      return element.offsetHeight;
23652    },
23653    triggerTransitionEnd: function triggerTransitionEnd(element) {
23654      $__default["default"](element).trigger(TRANSITION_END);
23655    },
23656    supportsTransitionEnd: function supportsTransitionEnd() {
23657      return Boolean(TRANSITION_END);
23658    },
23659    isElement: function isElement(obj) {
23660      return (obj[0] || obj).nodeType;
23661    },
23662    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
23663      for (var property in configTypes) {
23664        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
23665          var expectedTypes = configTypes[property];
23666          var value = config[property];
23667          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
23668
23669          if (!new RegExp(expectedTypes).test(valueType)) {
23670            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
23671          }
23672        }
23673      }
23674    },
23675    findShadowRoot: function findShadowRoot(element) {
23676      if (!document.documentElement.attachShadow) {
23677        return null;
23678      } // Can find the shadow root otherwise it'll return the document
23679
23680
23681      if (typeof element.getRootNode === 'function') {
23682        var root = element.getRootNode();
23683        return root instanceof ShadowRoot ? root : null;
23684      }
23685
23686      if (element instanceof ShadowRoot) {
23687        return element;
23688      } // when we don't find a shadow root
23689
23690
23691      if (!element.parentNode) {
23692        return null;
23693      }
23694
23695      return Util.findShadowRoot(element.parentNode);
23696    },
23697    jQueryDetection: function jQueryDetection() {
23698      if (typeof $__default["default"] === 'undefined') {
23699        throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
23700      }
23701
23702      var version = $__default["default"].fn.jquery.split(' ')[0].split('.');
23703      var minMajor = 1;
23704      var ltMajor = 2;
23705      var minMinor = 9;
23706      var minPatch = 1;
23707      var maxMajor = 4;
23708
23709      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
23710        throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
23711      }
23712    }
23713  };
23714  Util.jQueryDetection();
23715  setTransitionEndSupport();
23716
23717  /**
23718   * Constants
23719   */
23720
23721  var NAME$a = 'alert';
23722  var VERSION$a = '4.6.2';
23723  var DATA_KEY$a = 'bs.alert';
23724  var EVENT_KEY$a = "." + DATA_KEY$a;
23725  var DATA_API_KEY$7 = '.data-api';
23726  var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a];
23727  var CLASS_NAME_ALERT = 'alert';
23728  var CLASS_NAME_FADE$5 = 'fade';
23729  var CLASS_NAME_SHOW$7 = 'show';
23730  var EVENT_CLOSE = "close" + EVENT_KEY$a;
23731  var EVENT_CLOSED = "closed" + EVENT_KEY$a;
23732  var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7;
23733  var SELECTOR_DISMISS = '[data-dismiss="alert"]';
23734  /**
23735   * Class definition
23736   */
23737
23738  var Alert = /*#__PURE__*/function () {
23739    function Alert(element) {
23740      this._element = element;
23741    } // Getters
23742
23743
23744    var _proto = Alert.prototype;
23745
23746    // Public
23747    _proto.close = function close(element) {
23748      var rootElement = this._element;
23749
23750      if (element) {
23751        rootElement = this._getRootElement(element);
23752      }
23753
23754      var customEvent = this._triggerCloseEvent(rootElement);
23755
23756      if (customEvent.isDefaultPrevented()) {
23757        return;
23758      }
23759
23760      this._removeElement(rootElement);
23761    };
23762
23763    _proto.dispose = function dispose() {
23764      $__default["default"].removeData(this._element, DATA_KEY$a);
23765      this._element = null;
23766    } // Private
23767    ;
23768
23769    _proto._getRootElement = function _getRootElement(element) {
23770      var selector = Util.getSelectorFromElement(element);
23771      var parent = false;
23772
23773      if (selector) {
23774        parent = document.querySelector(selector);
23775      }
23776
23777      if (!parent) {
23778        parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
23779      }
23780
23781      return parent;
23782    };
23783
23784    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
23785      var closeEvent = $__default["default"].Event(EVENT_CLOSE);
23786      $__default["default"](element).trigger(closeEvent);
23787      return closeEvent;
23788    };
23789
23790    _proto._removeElement = function _removeElement(element) {
23791      var _this = this;
23792
23793      $__default["default"](element).removeClass(CLASS_NAME_SHOW$7);
23794
23795      if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) {
23796        this._destroyElement(element);
23797
23798        return;
23799      }
23800
23801      var transitionDuration = Util.getTransitionDurationFromElement(element);
23802      $__default["default"](element).one(Util.TRANSITION_END, function (event) {
23803        return _this._destroyElement(element, event);
23804      }).emulateTransitionEnd(transitionDuration);
23805    };
23806
23807    _proto._destroyElement = function _destroyElement(element) {
23808      $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
23809    } // Static
23810    ;
23811
23812    Alert._jQueryInterface = function _jQueryInterface(config) {
23813      return this.each(function () {
23814        var $element = $__default["default"](this);
23815        var data = $element.data(DATA_KEY$a);
23816
23817        if (!data) {
23818          data = new Alert(this);
23819          $element.data(DATA_KEY$a, data);
23820        }
23821
23822        if (config === 'close') {
23823          data[config](this);
23824        }
23825      });
23826    };
23827
23828    Alert._handleDismiss = function _handleDismiss(alertInstance) {
23829      return function (event) {
23830        if (event) {
23831          event.preventDefault();
23832        }
23833
23834        alertInstance.close(this);
23835      };
23836    };
23837
23838    _createClass(Alert, null, [{
23839      key: "VERSION",
23840      get: function get() {
23841        return VERSION$a;
23842      }
23843    }]);
23844
23845    return Alert;
23846  }();
23847  /**
23848   * Data API implementation
23849   */
23850
23851
23852  $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
23853  /**
23854   * jQuery
23855   */
23856
23857  $__default["default"].fn[NAME$a] = Alert._jQueryInterface;
23858  $__default["default"].fn[NAME$a].Constructor = Alert;
23859
23860  $__default["default"].fn[NAME$a].noConflict = function () {
23861    $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;
23862    return Alert._jQueryInterface;
23863  };
23864
23865  /**
23866   * Constants
23867   */
23868
23869  var NAME$9 = 'button';
23870  var VERSION$9 = '4.6.2';
23871  var DATA_KEY$9 = 'bs.button';
23872  var EVENT_KEY$9 = "." + DATA_KEY$9;
23873  var DATA_API_KEY$6 = '.data-api';
23874  var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9];
23875  var CLASS_NAME_ACTIVE$3 = 'active';
23876  var CLASS_NAME_BUTTON = 'btn';
23877  var CLASS_NAME_FOCUS = 'focus';
23878  var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6;
23879  var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6);
23880  var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6;
23881  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
23882  var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
23883  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]';
23884  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
23885  var SELECTOR_INPUT = 'input:not([type="hidden"])';
23886  var SELECTOR_ACTIVE$2 = '.active';
23887  var SELECTOR_BUTTON = '.btn';
23888  /**
23889   * Class definition
23890   */
23891
23892  var Button = /*#__PURE__*/function () {
23893    function Button(element) {
23894      this._element = element;
23895      this.shouldAvoidTriggerChange = false;
23896    } // Getters
23897
23898
23899    var _proto = Button.prototype;
23900
23901    // Public
23902    _proto.toggle = function toggle() {
23903      var triggerChangeEvent = true;
23904      var addAriaPressed = true;
23905      var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
23906
23907      if (rootElement) {
23908        var input = this._element.querySelector(SELECTOR_INPUT);
23909
23910        if (input) {
23911          if (input.type === 'radio') {
23912            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {
23913              triggerChangeEvent = false;
23914            } else {
23915              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);
23916
23917              if (activeElement) {
23918                $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);
23919              }
23920            }
23921          }
23922
23923          if (triggerChangeEvent) {
23924            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
23925            if (input.type === 'checkbox' || input.type === 'radio') {
23926              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);
23927            }
23928
23929            if (!this.shouldAvoidTriggerChange) {
23930              $__default["default"](input).trigger('change');
23931            }
23932          }
23933
23934          input.focus();
23935          addAriaPressed = false;
23936        }
23937      }
23938
23939      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
23940        if (addAriaPressed) {
23941          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));
23942        }
23943
23944        if (triggerChangeEvent) {
23945          $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);
23946        }
23947      }
23948    };
23949
23950    _proto.dispose = function dispose() {
23951      $__default["default"].removeData(this._element, DATA_KEY$9);
23952      this._element = null;
23953    } // Static
23954    ;
23955
23956    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
23957      return this.each(function () {
23958        var $element = $__default["default"](this);
23959        var data = $element.data(DATA_KEY$9);
23960
23961        if (!data) {
23962          data = new Button(this);
23963          $element.data(DATA_KEY$9, data);
23964        }
23965
23966        data.shouldAvoidTriggerChange = avoidTriggerChange;
23967
23968        if (config === 'toggle') {
23969          data[config]();
23970        }
23971      });
23972    };
23973
23974    _createClass(Button, null, [{
23975      key: "VERSION",
23976      get: function get() {
23977        return VERSION$9;
23978      }
23979    }]);
23980
23981    return Button;
23982  }();
23983  /**
23984   * Data API implementation
23985   */
23986
23987
23988  $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
23989    var button = event.target;
23990    var initialButton = button;
23991
23992    if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
23993      button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
23994    }
23995
23996    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
23997      event.preventDefault(); // work around Firefox bug #1540995
23998    } else {
23999      var inputBtn = button.querySelector(SELECTOR_INPUT);
24000
24001      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
24002        event.preventDefault(); // work around Firefox bug #1540995
24003
24004        return;
24005      }
24006
24007      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
24008        Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT');
24009      }
24010    }
24011  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
24012    var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
24013    $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
24014  });
24015  $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () {
24016    // ensure correct active class is set to match the controls' actual values/states
24017    // find all checkboxes/readio buttons inside data-toggle groups
24018    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
24019
24020    for (var i = 0, len = buttons.length; i < len; i++) {
24021      var button = buttons[i];
24022      var input = button.querySelector(SELECTOR_INPUT);
24023
24024      if (input.checked || input.hasAttribute('checked')) {
24025        button.classList.add(CLASS_NAME_ACTIVE$3);
24026      } else {
24027        button.classList.remove(CLASS_NAME_ACTIVE$3);
24028      }
24029    } // find all button toggles
24030
24031
24032    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));
24033
24034    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
24035      var _button = buttons[_i];
24036
24037      if (_button.getAttribute('aria-pressed') === 'true') {
24038        _button.classList.add(CLASS_NAME_ACTIVE$3);
24039      } else {
24040        _button.classList.remove(CLASS_NAME_ACTIVE$3);
24041      }
24042    }
24043  });
24044  /**
24045   * jQuery
24046   */
24047
24048  $__default["default"].fn[NAME$9] = Button._jQueryInterface;
24049  $__default["default"].fn[NAME$9].Constructor = Button;
24050
24051  $__default["default"].fn[NAME$9].noConflict = function () {
24052    $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;
24053    return Button._jQueryInterface;
24054  };
24055
24056  /**
24057   * Constants
24058   */
24059
24060  var NAME$8 = 'carousel';
24061  var VERSION$8 = '4.6.2';
24062  var DATA_KEY$8 = 'bs.carousel';
24063  var EVENT_KEY$8 = "." + DATA_KEY$8;
24064  var DATA_API_KEY$5 = '.data-api';
24065  var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8];
24066  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
24067
24068  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
24069
24070  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
24071
24072  var SWIPE_THRESHOLD = 40;
24073  var CLASS_NAME_CAROUSEL = 'carousel';
24074  var CLASS_NAME_ACTIVE$2 = 'active';
24075  var CLASS_NAME_SLIDE = 'slide';
24076  var CLASS_NAME_RIGHT = 'carousel-item-right';
24077  var CLASS_NAME_LEFT = 'carousel-item-left';
24078  var CLASS_NAME_NEXT = 'carousel-item-next';
24079  var CLASS_NAME_PREV = 'carousel-item-prev';
24080  var CLASS_NAME_POINTER_EVENT = 'pointer-event';
24081  var DIRECTION_NEXT = 'next';
24082  var DIRECTION_PREV = 'prev';
24083  var DIRECTION_LEFT = 'left';
24084  var DIRECTION_RIGHT = 'right';
24085  var EVENT_SLIDE = "slide" + EVENT_KEY$8;
24086  var EVENT_SLID = "slid" + EVENT_KEY$8;
24087  var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8;
24088  var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8;
24089  var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8;
24090  var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8;
24091  var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8;
24092  var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8;
24093  var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8;
24094  var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8;
24095  var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8;
24096  var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5;
24097  var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5;
24098  var SELECTOR_ACTIVE$1 = '.active';
24099  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
24100  var SELECTOR_ITEM = '.carousel-item';
24101  var SELECTOR_ITEM_IMG = '.carousel-item img';
24102  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
24103  var SELECTOR_INDICATORS = '.carousel-indicators';
24104  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
24105  var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
24106  var Default$7 = {
24107    interval: 5000,
24108    keyboard: true,
24109    slide: false,
24110    pause: 'hover',
24111    wrap: true,
24112    touch: true
24113  };
24114  var DefaultType$7 = {
24115    interval: '(number|boolean)',
24116    keyboard: 'boolean',
24117    slide: '(boolean|string)',
24118    pause: '(string|boolean)',
24119    wrap: 'boolean',
24120    touch: 'boolean'
24121  };
24122  var PointerType = {
24123    TOUCH: 'touch',
24124    PEN: 'pen'
24125  };
24126  /**
24127   * Class definition
24128   */
24129
24130  var Carousel = /*#__PURE__*/function () {
24131    function Carousel(element, config) {
24132      this._items = null;
24133      this._interval = null;
24134      this._activeElement = null;
24135      this._isPaused = false;
24136      this._isSliding = false;
24137      this.touchTimeout = null;
24138      this.touchStartX = 0;
24139      this.touchDeltaX = 0;
24140      this._config = this._getConfig(config);
24141      this._element = element;
24142      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
24143      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
24144      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
24145
24146      this._addEventListeners();
24147    } // Getters
24148
24149
24150    var _proto = Carousel.prototype;
24151
24152    // Public
24153    _proto.next = function next() {
24154      if (!this._isSliding) {
24155        this._slide(DIRECTION_NEXT);
24156      }
24157    };
24158
24159    _proto.nextWhenVisible = function nextWhenVisible() {
24160      var $element = $__default["default"](this._element); // Don't call next when the page isn't visible
24161      // or the carousel or its parent isn't visible
24162
24163      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {
24164        this.next();
24165      }
24166    };
24167
24168    _proto.prev = function prev() {
24169      if (!this._isSliding) {
24170        this._slide(DIRECTION_PREV);
24171      }
24172    };
24173
24174    _proto.pause = function pause(event) {
24175      if (!event) {
24176        this._isPaused = true;
24177      }
24178
24179      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
24180        Util.triggerTransitionEnd(this._element);
24181        this.cycle(true);
24182      }
24183
24184      clearInterval(this._interval);
24185      this._interval = null;
24186    };
24187
24188    _proto.cycle = function cycle(event) {
24189      if (!event) {
24190        this._isPaused = false;
24191      }
24192
24193      if (this._interval) {
24194        clearInterval(this._interval);
24195        this._interval = null;
24196      }
24197
24198      if (this._config.interval && !this._isPaused) {
24199        this._updateInterval();
24200
24201        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
24202      }
24203    };
24204
24205    _proto.to = function to(index) {
24206      var _this = this;
24207
24208      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
24209
24210      var activeIndex = this._getItemIndex(this._activeElement);
24211
24212      if (index > this._items.length - 1 || index < 0) {
24213        return;
24214      }
24215
24216      if (this._isSliding) {
24217        $__default["default"](this._element).one(EVENT_SLID, function () {
24218          return _this.to(index);
24219        });
24220        return;
24221      }
24222
24223      if (activeIndex === index) {
24224        this.pause();
24225        this.cycle();
24226        return;
24227      }
24228
24229      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
24230
24231      this._slide(direction, this._items[index]);
24232    };
24233
24234    _proto.dispose = function dispose() {
24235      $__default["default"](this._element).off(EVENT_KEY$8);
24236      $__default["default"].removeData(this._element, DATA_KEY$8);
24237      this._items = null;
24238      this._config = null;
24239      this._element = null;
24240      this._interval = null;
24241      this._isPaused = null;
24242      this._isSliding = null;
24243      this._activeElement = null;
24244      this._indicatorsElement = null;
24245    } // Private
24246    ;
24247
24248    _proto._getConfig = function _getConfig(config) {
24249      config = _extends({}, Default$7, config);
24250      Util.typeCheckConfig(NAME$8, config, DefaultType$7);
24251      return config;
24252    };
24253
24254    _proto._handleSwipe = function _handleSwipe() {
24255      var absDeltax = Math.abs(this.touchDeltaX);
24256
24257      if (absDeltax <= SWIPE_THRESHOLD) {
24258        return;
24259      }
24260
24261      var direction = absDeltax / this.touchDeltaX;
24262      this.touchDeltaX = 0; // swipe left
24263
24264      if (direction > 0) {
24265        this.prev();
24266      } // swipe right
24267
24268
24269      if (direction < 0) {
24270        this.next();
24271      }
24272    };
24273
24274    _proto._addEventListeners = function _addEventListeners() {
24275      var _this2 = this;
24276
24277      if (this._config.keyboard) {
24278        $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) {
24279          return _this2._keydown(event);
24280        });
24281      }
24282
24283      if (this._config.pause === 'hover') {
24284        $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) {
24285          return _this2.pause(event);
24286        }).on(EVENT_MOUSELEAVE, function (event) {
24287          return _this2.cycle(event);
24288        });
24289      }
24290
24291      if (this._config.touch) {
24292        this._addTouchEventListeners();
24293      }
24294    };
24295
24296    _proto._addTouchEventListeners = function _addTouchEventListeners() {
24297      var _this3 = this;
24298
24299      if (!this._touchSupported) {
24300        return;
24301      }
24302
24303      var start = function start(event) {
24304        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
24305          _this3.touchStartX = event.originalEvent.clientX;
24306        } else if (!_this3._pointerEvent) {
24307          _this3.touchStartX = event.originalEvent.touches[0].clientX;
24308        }
24309      };
24310
24311      var move = function move(event) {
24312        // ensure swiping with one touch and not pinching
24313        _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;
24314      };
24315
24316      var end = function end(event) {
24317        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
24318          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
24319        }
24320
24321        _this3._handleSwipe();
24322
24323        if (_this3._config.pause === 'hover') {
24324          // If it's a touch-enabled device, mouseenter/leave are fired as
24325          // part of the mouse compatibility events on first tap - the carousel
24326          // would stop cycling until user tapped out of it;
24327          // here, we listen for touchend, explicitly pause the carousel
24328          // (as if it's the second time we tap on it, mouseenter compat event
24329          // is NOT fired) and after a timeout (to allow for mouse compatibility
24330          // events to fire) we explicitly restart cycling
24331          _this3.pause();
24332
24333          if (_this3.touchTimeout) {
24334            clearTimeout(_this3.touchTimeout);
24335          }
24336
24337          _this3.touchTimeout = setTimeout(function (event) {
24338            return _this3.cycle(event);
24339          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
24340        }
24341      };
24342
24343      $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
24344        return e.preventDefault();
24345      });
24346
24347      if (this._pointerEvent) {
24348        $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) {
24349          return start(event);
24350        });
24351        $__default["default"](this._element).on(EVENT_POINTERUP, function (event) {
24352          return end(event);
24353        });
24354
24355        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
24356      } else {
24357        $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) {
24358          return start(event);
24359        });
24360        $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) {
24361          return move(event);
24362        });
24363        $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) {
24364          return end(event);
24365        });
24366      }
24367    };
24368
24369    _proto._keydown = function _keydown(event) {
24370      if (/input|textarea/i.test(event.target.tagName)) {
24371        return;
24372      }
24373
24374      switch (event.which) {
24375        case ARROW_LEFT_KEYCODE:
24376          event.preventDefault();
24377          this.prev();
24378          break;
24379
24380        case ARROW_RIGHT_KEYCODE:
24381          event.preventDefault();
24382          this.next();
24383          break;
24384      }
24385    };
24386
24387    _proto._getItemIndex = function _getItemIndex(element) {
24388      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
24389      return this._items.indexOf(element);
24390    };
24391
24392    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
24393      var isNextDirection = direction === DIRECTION_NEXT;
24394      var isPrevDirection = direction === DIRECTION_PREV;
24395
24396      var activeIndex = this._getItemIndex(activeElement);
24397
24398      var lastItemIndex = this._items.length - 1;
24399      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
24400
24401      if (isGoingToWrap && !this._config.wrap) {
24402        return activeElement;
24403      }
24404
24405      var delta = direction === DIRECTION_PREV ? -1 : 1;
24406      var itemIndex = (activeIndex + delta) % this._items.length;
24407      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
24408    };
24409
24410    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
24411      var targetIndex = this._getItemIndex(relatedTarget);
24412
24413      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
24414
24415      var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
24416        relatedTarget: relatedTarget,
24417        direction: eventDirectionName,
24418        from: fromIndex,
24419        to: targetIndex
24420      });
24421      $__default["default"](this._element).trigger(slideEvent);
24422      return slideEvent;
24423    };
24424
24425    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
24426      if (this._indicatorsElement) {
24427        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
24428        $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2);
24429
24430        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
24431
24432        if (nextIndicator) {
24433          $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);
24434        }
24435      }
24436    };
24437
24438    _proto._updateInterval = function _updateInterval() {
24439      var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);
24440
24441      if (!element) {
24442        return;
24443      }
24444
24445      var elementInterval = parseInt(element.getAttribute('data-interval'), 10);
24446
24447      if (elementInterval) {
24448        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
24449        this._config.interval = elementInterval;
24450      } else {
24451        this._config.interval = this._config.defaultInterval || this._config.interval;
24452      }
24453    };
24454
24455    _proto._slide = function _slide(direction, element) {
24456      var _this4 = this;
24457
24458      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
24459
24460      var activeElementIndex = this._getItemIndex(activeElement);
24461
24462      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
24463
24464      var nextElementIndex = this._getItemIndex(nextElement);
24465
24466      var isCycling = Boolean(this._interval);
24467      var directionalClassName;
24468      var orderClassName;
24469      var eventDirectionName;
24470
24471      if (direction === DIRECTION_NEXT) {
24472        directionalClassName = CLASS_NAME_LEFT;
24473        orderClassName = CLASS_NAME_NEXT;
24474        eventDirectionName = DIRECTION_LEFT;
24475      } else {
24476        directionalClassName = CLASS_NAME_RIGHT;
24477        orderClassName = CLASS_NAME_PREV;
24478        eventDirectionName = DIRECTION_RIGHT;
24479      }
24480
24481      if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {
24482        this._isSliding = false;
24483        return;
24484      }
24485
24486      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
24487
24488      if (slideEvent.isDefaultPrevented()) {
24489        return;
24490      }
24491
24492      if (!activeElement || !nextElement) {
24493        // Some weirdness is happening, so we bail
24494        return;
24495      }
24496
24497      this._isSliding = true;
24498
24499      if (isCycling) {
24500        this.pause();
24501      }
24502
24503      this._setActiveIndicatorElement(nextElement);
24504
24505      this._activeElement = nextElement;
24506      var slidEvent = $__default["default"].Event(EVENT_SLID, {
24507        relatedTarget: nextElement,
24508        direction: eventDirectionName,
24509        from: activeElementIndex,
24510        to: nextElementIndex
24511      });
24512
24513      if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
24514        $__default["default"](nextElement).addClass(orderClassName);
24515        Util.reflow(nextElement);
24516        $__default["default"](activeElement).addClass(directionalClassName);
24517        $__default["default"](nextElement).addClass(directionalClassName);
24518        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
24519        $__default["default"](activeElement).one(Util.TRANSITION_END, function () {
24520          $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2);
24521          $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName);
24522          _this4._isSliding = false;
24523          setTimeout(function () {
24524            return $__default["default"](_this4._element).trigger(slidEvent);
24525          }, 0);
24526        }).emulateTransitionEnd(transitionDuration);
24527      } else {
24528        $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);
24529        $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2);
24530        this._isSliding = false;
24531        $__default["default"](this._element).trigger(slidEvent);
24532      }
24533
24534      if (isCycling) {
24535        this.cycle();
24536      }
24537    } // Static
24538    ;
24539
24540    Carousel._jQueryInterface = function _jQueryInterface(config) {
24541      return this.each(function () {
24542        var data = $__default["default"](this).data(DATA_KEY$8);
24543
24544        var _config = _extends({}, Default$7, $__default["default"](this).data());
24545
24546        if (typeof config === 'object') {
24547          _config = _extends({}, _config, config);
24548        }
24549
24550        var action = typeof config === 'string' ? config : _config.slide;
24551
24552        if (!data) {
24553          data = new Carousel(this, _config);
24554          $__default["default"](this).data(DATA_KEY$8, data);
24555        }
24556
24557        if (typeof config === 'number') {
24558          data.to(config);
24559        } else if (typeof action === 'string') {
24560          if (typeof data[action] === 'undefined') {
24561            throw new TypeError("No method named \"" + action + "\"");
24562          }
24563
24564          data[action]();
24565        } else if (_config.interval && _config.ride) {
24566          data.pause();
24567          data.cycle();
24568        }
24569      });
24570    };
24571
24572    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
24573      var selector = Util.getSelectorFromElement(this);
24574
24575      if (!selector) {
24576        return;
24577      }
24578
24579      var target = $__default["default"](selector)[0];
24580
24581      if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) {
24582        return;
24583      }
24584
24585      var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
24586
24587      var slideIndex = this.getAttribute('data-slide-to');
24588
24589      if (slideIndex) {
24590        config.interval = false;
24591      }
24592
24593      Carousel._jQueryInterface.call($__default["default"](target), config);
24594
24595      if (slideIndex) {
24596        $__default["default"](target).data(DATA_KEY$8).to(slideIndex);
24597      }
24598
24599      event.preventDefault();
24600    };
24601
24602    _createClass(Carousel, null, [{
24603      key: "VERSION",
24604      get: function get() {
24605        return VERSION$8;
24606      }
24607    }, {
24608      key: "Default",
24609      get: function get() {
24610        return Default$7;
24611      }
24612    }]);
24613
24614    return Carousel;
24615  }();
24616  /**
24617   * Data API implementation
24618   */
24619
24620
24621  $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
24622  $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () {
24623    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
24624
24625    for (var i = 0, len = carousels.length; i < len; i++) {
24626      var $carousel = $__default["default"](carousels[i]);
24627
24628      Carousel._jQueryInterface.call($carousel, $carousel.data());
24629    }
24630  });
24631  /**
24632   * jQuery
24633   */
24634
24635  $__default["default"].fn[NAME$8] = Carousel._jQueryInterface;
24636  $__default["default"].fn[NAME$8].Constructor = Carousel;
24637
24638  $__default["default"].fn[NAME$8].noConflict = function () {
24639    $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;
24640    return Carousel._jQueryInterface;
24641  };
24642
24643  /**
24644   * Constants
24645   */
24646
24647  var NAME$7 = 'collapse';
24648  var VERSION$7 = '4.6.2';
24649  var DATA_KEY$7 = 'bs.collapse';
24650  var EVENT_KEY$7 = "." + DATA_KEY$7;
24651  var DATA_API_KEY$4 = '.data-api';
24652  var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7];
24653  var CLASS_NAME_SHOW$6 = 'show';
24654  var CLASS_NAME_COLLAPSE = 'collapse';
24655  var CLASS_NAME_COLLAPSING = 'collapsing';
24656  var CLASS_NAME_COLLAPSED = 'collapsed';
24657  var DIMENSION_WIDTH = 'width';
24658  var DIMENSION_HEIGHT = 'height';
24659  var EVENT_SHOW$4 = "show" + EVENT_KEY$7;
24660  var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7;
24661  var EVENT_HIDE$4 = "hide" + EVENT_KEY$7;
24662  var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7;
24663  var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4;
24664  var SELECTOR_ACTIVES = '.show, .collapsing';
24665  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]';
24666  var Default$6 = {
24667    toggle: true,
24668    parent: ''
24669  };
24670  var DefaultType$6 = {
24671    toggle: 'boolean',
24672    parent: '(string|element)'
24673  };
24674  /**
24675   * Class definition
24676   */
24677
24678  var Collapse = /*#__PURE__*/function () {
24679    function Collapse(element, config) {
24680      this._isTransitioning = false;
24681      this._element = element;
24682      this._config = this._getConfig(config);
24683      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
24684      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));
24685
24686      for (var i = 0, len = toggleList.length; i < len; i++) {
24687        var elem = toggleList[i];
24688        var selector = Util.getSelectorFromElement(elem);
24689        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
24690          return foundElem === element;
24691        });
24692
24693        if (selector !== null && filterElement.length > 0) {
24694          this._selector = selector;
24695
24696          this._triggerArray.push(elem);
24697        }
24698      }
24699
24700      this._parent = this._config.parent ? this._getParent() : null;
24701
24702      if (!this._config.parent) {
24703        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
24704      }
24705
24706      if (this._config.toggle) {
24707        this.toggle();
24708      }
24709    } // Getters
24710
24711
24712    var _proto = Collapse.prototype;
24713
24714    // Public
24715    _proto.toggle = function toggle() {
24716      if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
24717        this.hide();
24718      } else {
24719        this.show();
24720      }
24721    };
24722
24723    _proto.show = function show() {
24724      var _this = this;
24725
24726      if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
24727        return;
24728      }
24729
24730      var actives;
24731      var activesData;
24732
24733      if (this._parent) {
24734        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
24735          if (typeof _this._config.parent === 'string') {
24736            return elem.getAttribute('data-parent') === _this._config.parent;
24737          }
24738
24739          return elem.classList.contains(CLASS_NAME_COLLAPSE);
24740        });
24741
24742        if (actives.length === 0) {
24743          actives = null;
24744        }
24745      }
24746
24747      if (actives) {
24748        activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7);
24749
24750        if (activesData && activesData._isTransitioning) {
24751          return;
24752        }
24753      }
24754
24755      var startEvent = $__default["default"].Event(EVENT_SHOW$4);
24756      $__default["default"](this._element).trigger(startEvent);
24757
24758      if (startEvent.isDefaultPrevented()) {
24759        return;
24760      }
24761
24762      if (actives) {
24763        Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide');
24764
24765        if (!activesData) {
24766          $__default["default"](actives).data(DATA_KEY$7, null);
24767        }
24768      }
24769
24770      var dimension = this._getDimension();
24771
24772      $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
24773      this._element.style[dimension] = 0;
24774
24775      if (this._triggerArray.length) {
24776        $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
24777      }
24778
24779      this.setTransitioning(true);
24780
24781      var complete = function complete() {
24782        $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
24783        _this._element.style[dimension] = '';
24784
24785        _this.setTransitioning(false);
24786
24787        $__default["default"](_this._element).trigger(EVENT_SHOWN$4);
24788      };
24789
24790      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
24791      var scrollSize = "scroll" + capitalizedDimension;
24792      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
24793      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
24794      this._element.style[dimension] = this._element[scrollSize] + "px";
24795    };
24796
24797    _proto.hide = function hide() {
24798      var _this2 = this;
24799
24800      if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
24801        return;
24802      }
24803
24804      var startEvent = $__default["default"].Event(EVENT_HIDE$4);
24805      $__default["default"](this._element).trigger(startEvent);
24806
24807      if (startEvent.isDefaultPrevented()) {
24808        return;
24809      }
24810
24811      var dimension = this._getDimension();
24812
24813      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
24814      Util.reflow(this._element);
24815      $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
24816      var triggerArrayLength = this._triggerArray.length;
24817
24818      if (triggerArrayLength > 0) {
24819        for (var i = 0; i < triggerArrayLength; i++) {
24820          var trigger = this._triggerArray[i];
24821          var selector = Util.getSelectorFromElement(trigger);
24822
24823          if (selector !== null) {
24824            var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
24825
24826            if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {
24827              $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
24828            }
24829          }
24830        }
24831      }
24832
24833      this.setTransitioning(true);
24834
24835      var complete = function complete() {
24836        _this2.setTransitioning(false);
24837
24838        $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);
24839      };
24840
24841      this._element.style[dimension] = '';
24842      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
24843      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
24844    };
24845
24846    _proto.setTransitioning = function setTransitioning(isTransitioning) {
24847      this._isTransitioning = isTransitioning;
24848    };
24849
24850    _proto.dispose = function dispose() {
24851      $__default["default"].removeData(this._element, DATA_KEY$7);
24852      this._config = null;
24853      this._parent = null;
24854      this._element = null;
24855      this._triggerArray = null;
24856      this._isTransitioning = null;
24857    } // Private
24858    ;
24859
24860    _proto._getConfig = function _getConfig(config) {
24861      config = _extends({}, Default$6, config);
24862      config.toggle = Boolean(config.toggle); // Coerce string values
24863
24864      Util.typeCheckConfig(NAME$7, config, DefaultType$6);
24865      return config;
24866    };
24867
24868    _proto._getDimension = function _getDimension() {
24869      var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
24870      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
24871    };
24872
24873    _proto._getParent = function _getParent() {
24874      var _this3 = this;
24875
24876      var parent;
24877
24878      if (Util.isElement(this._config.parent)) {
24879        parent = this._config.parent; // It's a jQuery object
24880
24881        if (typeof this._config.parent.jquery !== 'undefined') {
24882          parent = this._config.parent[0];
24883        }
24884      } else {
24885        parent = document.querySelector(this._config.parent);
24886      }
24887
24888      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
24889      var children = [].slice.call(parent.querySelectorAll(selector));
24890      $__default["default"](children).each(function (i, element) {
24891        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
24892      });
24893      return parent;
24894    };
24895
24896    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
24897      var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6);
24898
24899      if (triggerArray.length) {
24900        $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
24901      }
24902    } // Static
24903    ;
24904
24905    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
24906      var selector = Util.getSelectorFromElement(element);
24907      return selector ? document.querySelector(selector) : null;
24908    };
24909
24910    Collapse._jQueryInterface = function _jQueryInterface(config) {
24911      return this.each(function () {
24912        var $element = $__default["default"](this);
24913        var data = $element.data(DATA_KEY$7);
24914
24915        var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});
24916
24917        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
24918          _config.toggle = false;
24919        }
24920
24921        if (!data) {
24922          data = new Collapse(this, _config);
24923          $element.data(DATA_KEY$7, data);
24924        }
24925
24926        if (typeof config === 'string') {
24927          if (typeof data[config] === 'undefined') {
24928            throw new TypeError("No method named \"" + config + "\"");
24929          }
24930
24931          data[config]();
24932        }
24933      });
24934    };
24935
24936    _createClass(Collapse, null, [{
24937      key: "VERSION",
24938      get: function get() {
24939        return VERSION$7;
24940      }
24941    }, {
24942      key: "Default",
24943      get: function get() {
24944        return Default$6;
24945      }
24946    }]);
24947
24948    return Collapse;
24949  }();
24950  /**
24951   * Data API implementation
24952   */
24953
24954
24955  $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
24956    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
24957    if (event.currentTarget.tagName === 'A') {
24958      event.preventDefault();
24959    }
24960
24961    var $trigger = $__default["default"](this);
24962    var selector = Util.getSelectorFromElement(this);
24963    var selectors = [].slice.call(document.querySelectorAll(selector));
24964    $__default["default"](selectors).each(function () {
24965      var $target = $__default["default"](this);
24966      var data = $target.data(DATA_KEY$7);
24967      var config = data ? 'toggle' : $trigger.data();
24968
24969      Collapse._jQueryInterface.call($target, config);
24970    });
24971  });
24972  /**
24973   * jQuery
24974   */
24975
24976  $__default["default"].fn[NAME$7] = Collapse._jQueryInterface;
24977  $__default["default"].fn[NAME$7].Constructor = Collapse;
24978
24979  $__default["default"].fn[NAME$7].noConflict = function () {
24980    $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;
24981    return Collapse._jQueryInterface;
24982  };
24983
24984  /**
24985   * Constants
24986   */
24987
24988  var NAME$6 = 'dropdown';
24989  var VERSION$6 = '4.6.2';
24990  var DATA_KEY$6 = 'bs.dropdown';
24991  var EVENT_KEY$6 = "." + DATA_KEY$6;
24992  var DATA_API_KEY$3 = '.data-api';
24993  var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6];
24994  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
24995
24996  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
24997
24998  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
24999
25000  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
25001
25002  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
25003
25004  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
25005
25006  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1);
25007  var CLASS_NAME_DISABLED$1 = 'disabled';
25008  var CLASS_NAME_SHOW$5 = 'show';
25009  var CLASS_NAME_DROPUP = 'dropup';
25010  var CLASS_NAME_DROPRIGHT = 'dropright';
25011  var CLASS_NAME_DROPLEFT = 'dropleft';
25012  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
25013  var CLASS_NAME_POSITION_STATIC = 'position-static';
25014  var EVENT_HIDE$3 = "hide" + EVENT_KEY$6;
25015  var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6;
25016  var EVENT_SHOW$3 = "show" + EVENT_KEY$6;
25017  var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6;
25018  var EVENT_CLICK = "click" + EVENT_KEY$6;
25019  var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3;
25020  var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3;
25021  var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3;
25022  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
25023  var SELECTOR_FORM_CHILD = '.dropdown form';
25024  var SELECTOR_MENU = '.dropdown-menu';
25025  var SELECTOR_NAVBAR_NAV = '.navbar-nav';
25026  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
25027  var PLACEMENT_TOP = 'top-start';
25028  var PLACEMENT_TOPEND = 'top-end';
25029  var PLACEMENT_BOTTOM = 'bottom-start';
25030  var PLACEMENT_BOTTOMEND = 'bottom-end';
25031  var PLACEMENT_RIGHT = 'right-start';
25032  var PLACEMENT_LEFT = 'left-start';
25033  var Default$5 = {
25034    offset: 0,
25035    flip: true,
25036    boundary: 'scrollParent',
25037    reference: 'toggle',
25038    display: 'dynamic',
25039    popperConfig: null
25040  };
25041  var DefaultType$5 = {
25042    offset: '(number|string|function)',
25043    flip: 'boolean',
25044    boundary: '(string|element)',
25045    reference: '(string|element)',
25046    display: 'string',
25047    popperConfig: '(null|object)'
25048  };
25049  /**
25050   * Class definition
25051   */
25052
25053  var Dropdown = /*#__PURE__*/function () {
25054    function Dropdown(element, config) {
25055      this._element = element;
25056      this._popper = null;
25057      this._config = this._getConfig(config);
25058      this._menu = this._getMenuElement();
25059      this._inNavbar = this._detectNavbar();
25060
25061      this._addEventListeners();
25062    } // Getters
25063
25064
25065    var _proto = Dropdown.prototype;
25066
25067    // Public
25068    _proto.toggle = function toggle() {
25069      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {
25070        return;
25071      }
25072
25073      var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5);
25074
25075      Dropdown._clearMenus();
25076
25077      if (isActive) {
25078        return;
25079      }
25080
25081      this.show(true);
25082    };
25083
25084    _proto.show = function show(usePopper) {
25085      if (usePopper === void 0) {
25086        usePopper = false;
25087      }
25088
25089      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
25090        return;
25091      }
25092
25093      var relatedTarget = {
25094        relatedTarget: this._element
25095      };
25096      var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget);
25097
25098      var parent = Dropdown._getParentFromElement(this._element);
25099
25100      $__default["default"](parent).trigger(showEvent);
25101
25102      if (showEvent.isDefaultPrevented()) {
25103        return;
25104      } // Totally disable Popper for Dropdowns in Navbar
25105
25106
25107      if (!this._inNavbar && usePopper) {
25108        // Check for Popper dependency
25109        if (typeof Popper__default["default"] === 'undefined') {
25110          throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
25111        }
25112
25113        var referenceElement = this._element;
25114
25115        if (this._config.reference === 'parent') {
25116          referenceElement = parent;
25117        } else if (Util.isElement(this._config.reference)) {
25118          referenceElement = this._config.reference; // Check if it's jQuery element
25119
25120          if (typeof this._config.reference.jquery !== 'undefined') {
25121            referenceElement = this._config.reference[0];
25122          }
25123        } // If boundary is not `scrollParent`, then set position to `static`
25124        // to allow the menu to "escape" the scroll parent's boundaries
25125        // https://github.com/twbs/bootstrap/issues/24251
25126
25127
25128        if (this._config.boundary !== 'scrollParent') {
25129          $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
25130        }
25131
25132        this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig());
25133      } // If this is a touch-enabled device we add extra
25134      // empty mouseover listeners to the body's immediate children;
25135      // only needed because of broken event delegation on iOS
25136      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
25137
25138
25139      if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
25140        $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
25141      }
25142
25143      this._element.focus();
25144
25145      this._element.setAttribute('aria-expanded', true);
25146
25147      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
25148      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget));
25149    };
25150
25151    _proto.hide = function hide() {
25152      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
25153        return;
25154      }
25155
25156      var relatedTarget = {
25157        relatedTarget: this._element
25158      };
25159      var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
25160
25161      var parent = Dropdown._getParentFromElement(this._element);
25162
25163      $__default["default"](parent).trigger(hideEvent);
25164
25165      if (hideEvent.isDefaultPrevented()) {
25166        return;
25167      }
25168
25169      if (this._popper) {
25170        this._popper.destroy();
25171      }
25172
25173      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
25174      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
25175    };
25176
25177    _proto.dispose = function dispose() {
25178      $__default["default"].removeData(this._element, DATA_KEY$6);
25179      $__default["default"](this._element).off(EVENT_KEY$6);
25180      this._element = null;
25181      this._menu = null;
25182
25183      if (this._popper !== null) {
25184        this._popper.destroy();
25185
25186        this._popper = null;
25187      }
25188    };
25189
25190    _proto.update = function update() {
25191      this._inNavbar = this._detectNavbar();
25192
25193      if (this._popper !== null) {
25194        this._popper.scheduleUpdate();
25195      }
25196    } // Private
25197    ;
25198
25199    _proto._addEventListeners = function _addEventListeners() {
25200      var _this = this;
25201
25202      $__default["default"](this._element).on(EVENT_CLICK, function (event) {
25203        event.preventDefault();
25204        event.stopPropagation();
25205
25206        _this.toggle();
25207      });
25208    };
25209
25210    _proto._getConfig = function _getConfig(config) {
25211      config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config);
25212      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
25213      return config;
25214    };
25215
25216    _proto._getMenuElement = function _getMenuElement() {
25217      if (!this._menu) {
25218        var parent = Dropdown._getParentFromElement(this._element);
25219
25220        if (parent) {
25221          this._menu = parent.querySelector(SELECTOR_MENU);
25222        }
25223      }
25224
25225      return this._menu;
25226    };
25227
25228    _proto._getPlacement = function _getPlacement() {
25229      var $parentDropdown = $__default["default"](this._element.parentNode);
25230      var placement = PLACEMENT_BOTTOM; // Handle dropup
25231
25232      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
25233        placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
25234      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
25235        placement = PLACEMENT_RIGHT;
25236      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
25237        placement = PLACEMENT_LEFT;
25238      } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
25239        placement = PLACEMENT_BOTTOMEND;
25240      }
25241
25242      return placement;
25243    };
25244
25245    _proto._detectNavbar = function _detectNavbar() {
25246      return $__default["default"](this._element).closest('.navbar').length > 0;
25247    };
25248
25249    _proto._getOffset = function _getOffset() {
25250      var _this2 = this;
25251
25252      var offset = {};
25253
25254      if (typeof this._config.offset === 'function') {
25255        offset.fn = function (data) {
25256          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));
25257          return data;
25258        };
25259      } else {
25260        offset.offset = this._config.offset;
25261      }
25262
25263      return offset;
25264    };
25265
25266    _proto._getPopperConfig = function _getPopperConfig() {
25267      var popperConfig = {
25268        placement: this._getPlacement(),
25269        modifiers: {
25270          offset: this._getOffset(),
25271          flip: {
25272            enabled: this._config.flip
25273          },
25274          preventOverflow: {
25275            boundariesElement: this._config.boundary
25276          }
25277        }
25278      }; // Disable Popper if we have a static display
25279
25280      if (this._config.display === 'static') {
25281        popperConfig.modifiers.applyStyle = {
25282          enabled: false
25283        };
25284      }
25285
25286      return _extends({}, popperConfig, this._config.popperConfig);
25287    } // Static
25288    ;
25289
25290    Dropdown._jQueryInterface = function _jQueryInterface(config) {
25291      return this.each(function () {
25292        var data = $__default["default"](this).data(DATA_KEY$6);
25293
25294        var _config = typeof config === 'object' ? config : null;
25295
25296        if (!data) {
25297          data = new Dropdown(this, _config);
25298          $__default["default"](this).data(DATA_KEY$6, data);
25299        }
25300
25301        if (typeof config === 'string') {
25302          if (typeof data[config] === 'undefined') {
25303            throw new TypeError("No method named \"" + config + "\"");
25304          }
25305
25306          data[config]();
25307        }
25308      });
25309    };
25310
25311    Dropdown._clearMenus = function _clearMenus(event) {
25312      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
25313        return;
25314      }
25315
25316      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
25317
25318      for (var i = 0, len = toggles.length; i < len; i++) {
25319        var parent = Dropdown._getParentFromElement(toggles[i]);
25320
25321        var context = $__default["default"](toggles[i]).data(DATA_KEY$6);
25322        var relatedTarget = {
25323          relatedTarget: toggles[i]
25324        };
25325
25326        if (event && event.type === 'click') {
25327          relatedTarget.clickEvent = event;
25328        }
25329
25330        if (!context) {
25331          continue;
25332        }
25333
25334        var dropdownMenu = context._menu;
25335
25336        if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) {
25337          continue;
25338        }
25339
25340        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) {
25341          continue;
25342        }
25343
25344        var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
25345        $__default["default"](parent).trigger(hideEvent);
25346
25347        if (hideEvent.isDefaultPrevented()) {
25348          continue;
25349        } // If this is a touch-enabled device we remove the extra
25350        // empty mouseover listeners we added for iOS support
25351
25352
25353        if ('ontouchstart' in document.documentElement) {
25354          $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
25355        }
25356
25357        toggles[i].setAttribute('aria-expanded', 'false');
25358
25359        if (context._popper) {
25360          context._popper.destroy();
25361        }
25362
25363        $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);
25364        $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
25365      }
25366    };
25367
25368    Dropdown._getParentFromElement = function _getParentFromElement(element) {
25369      var parent;
25370      var selector = Util.getSelectorFromElement(element);
25371
25372      if (selector) {
25373        parent = document.querySelector(selector);
25374      }
25375
25376      return parent || element.parentNode;
25377    } // eslint-disable-next-line complexity
25378    ;
25379
25380    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
25381      // If not input/textarea:
25382      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
25383      // If input/textarea:
25384      //  - If space key => not a dropdown command
25385      //  - If key is other than escape
25386      //    - If key is not up or down => not a dropdown command
25387      //    - If trigger inside the menu =>
25387 not a dropdown command
25388      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
25389        return;
25390      }
25391
25392      if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) {
25393        return;
25394      }
25395
25396      var parent = Dropdown._getParentFromElement(this);
25397
25398      var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5);
25399
25400      if (!isActive && event.which === ESCAPE_KEYCODE$1) {
25401        return;
25402      }
25403
25404      event.preventDefault();
25405      event.stopPropagation();
25406
25407      if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {
25408        if (event.which === ESCAPE_KEYCODE$1) {
25409          $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
25410        }
25411
25412        $__default["default"](this).trigger('click');
25413        return;
25414      }
25415
25416      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
25417        return $__default["default"](item).is(':visible');
25418      });
25419
25420      if (items.length === 0) {
25421        return;
25422      }
25423
25424      var index = items.indexOf(event.target);
25425
25426      if (event.which === ARROW_UP_KEYCODE && index > 0) {
25427        // Up
25428        index--;
25429      }
25430
25431      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
25432        // Down
25433        index++;
25434      }
25435
25436      if (index < 0) {
25437        index = 0;
25438      }
25439
25440      items[index].focus();
25441    };
25442
25443    _createClass(Dropdown, null, [{
25444      key: "VERSION",
25445      get: function get() {
25446        return VERSION$6;
25447      }
25448    }, {
25449      key: "Default",
25450      get: function get() {
25451        return Default$5;
25452      }
25453    }, {
25454      key: "DefaultType",
25455      get: function get() {
25456        return DefaultType$5;
25457      }
25458    }]);
25459
25460    return Dropdown;
25461  }();
25462  /**
25463   * Data API implementation
25464   */
25465
25466
25467  $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
25468    event.preventDefault();
25469    event.stopPropagation();
25470
25471    Dropdown._jQueryInterface.call($__default["default"](this), 'toggle');
25472  }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {
25473    e.stopPropagation();
25474  });
25475  /**
25476   * jQuery
25477   */
25478
25479  $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface;
25480  $__default["default"].fn[NAME$6].Constructor = Dropdown;
25481
25482  $__default["default"].fn[NAME$6].noConflict = function () {
25483    $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;
25484    return Dropdown._jQueryInterface;
25485  };
25486
25487  /**
25488   * Constants
25489   */
25490
25491  var NAME$5 = 'modal';
25492  var VERSION$5 = '4.6.2';
25493  var DATA_KEY$5 = 'bs.modal';
25494  var EVENT_KEY$5 = "." + DATA_KEY$5;
25495  var DATA_API_KEY$2 = '.data-api';
25496  var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5];
25497  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
25498
25499  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
25500  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
25501  var CLASS_NAME_BACKDROP = 'modal-backdrop';
25502  var CLASS_NAME_OPEN = 'modal-open';
25503  var CLASS_NAME_FADE$4 = 'fade';
25504  var CLASS_NAME_SHOW$4 = 'show';
25505  var CLASS_NAME_STATIC = 'modal-static';
25506  var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
25507  var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
25508  var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
25509  var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
25510  var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
25511  var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
25512  var EVENT_RESIZE = "resize" + EVENT_KEY$5;
25513  var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5;
25514  var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
25515  var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
25516  var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
25517  var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2;
25518  var SELECTOR_DIALOG = '.modal-dialog';
25519  var SELECTOR_MODAL_BODY = '.modal-body';
25520  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]';
25521  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]';
25522  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
25523  var SELECTOR_STICKY_CONTENT = '.sticky-top';
25524  var Default$4 = {
25525    backdrop: true,
25526    keyboard: true,
25527    focus: true,
25528    show: true
25529  };
25530  var DefaultType$4 = {
25531    backdrop: '(boolean|string)',
25532    keyboard: 'boolean',
25533    focus: 'boolean',
25534    show: 'boolean'
25535  };
25536  /**
25537   * Class definition
25538   */
25539
25540  var Modal = /*#__PURE__*/function () {
25541    function Modal(element, config) {
25542      this._config = this._getConfig(config);
25543      this._element = element;
25544      this._dialog = element.querySelector(SELECTOR_DIALOG);
25545      this._backdrop = null;
25546      this._isShown = false;
25547      this._isBodyOverflowing = false;
25548      this._ignoreBackdropClick = false;
25549      this._isTransitioning = false;
25550      this._scrollbarWidth = 0;
25551    } // Getters
25552
25553
25554    var _proto = Modal.prototype;
25555
25556    // Public
25557    _proto.toggle = function toggle(relatedTarget) {
25558      return this._isShown ? this.hide() : this.show(relatedTarget);
25559    };
25560
25561    _proto.show = function show(relatedTarget) {
25562      var _this = this;
25563
25564      if (this._isShown || this._isTransitioning) {
25565        return;
25566      }
25567
25568      var showEvent = $__default["default"].Event(EVENT_SHOW$2, {
25569        relatedTarget: relatedTarget
25570      });
25571      $__default["default"](this._element).trigger(showEvent);
25572
25573      if (showEvent.isDefaultPrevented()) {
25574        return;
25575      }
25576
25577      this._isShown = true;
25578
25579      if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
25580        this._isTransitioning = true;
25581      }
25582
25583      this._checkScrollbar();
25584
25585      this._setScrollbar();
25586
25587      this._adjustDialog();
25588
25589      this._setEscapeEvent();
25590
25591      this._setResizeEvent();
25592
25593      $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {
25594        return _this.hide(event);
25595      });
25596      $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
25597        $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
25598          if ($__default["default"](event.target).is(_this._element)) {
25599            _this._ignoreBackdropClick = true;
25600          }
25601        });
25602      });
25603
25604      this._showBackdrop(function () {
25605        return _this._showElement(relatedTarget);
25606      });
25607    };
25608
25609    _proto.hide = function hide(event) {
25610      var _this2 = this;
25611
25612      if (event) {
25613        event.preventDefault();
25614      }
25615
25616      if (!this._isShown || this._isTransitioning) {
25617        return;
25618      }
25619
25620      var hideEvent = $__default["default"].Event(EVENT_HIDE$2);
25621      $__default["default"](this._element).trigger(hideEvent);
25622
25623      if (!this._isShown || hideEvent.isDefaultPrevented()) {
25624        return;
25625      }
25626
25627      this._isShown = false;
25628      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
25629
25630      if (transition) {
25631        this._isTransitioning = true;
25632      }
25633
25634      this._setEscapeEvent();
25635
25636      this._setResizeEvent();
25637
25638      $__default["default"](document).off(EVENT_FOCUSIN);
25639      $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4);
25640      $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1);
25641      $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
25642
25643      if (transition) {
25644        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
25645        $__default["default"](this._element).one(Util.TRANSITION_END, function (event) {
25646          return _this2._hideModal(event);
25647        }).emulateTransitionEnd(transitionDuration);
25648      } else {
25649        this._hideModal();
25650      }
25651    };
25652
25653    _proto.dispose = function dispose() {
25654      [window, this._element, this._dialog].forEach(function (htmlElement) {
25655        return $__default["default"](htmlElement).off(EVENT_KEY$5);
25656      });
25657      /**
25658       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
25659       * Do not move `document` in `htmlElements` array
25660       * It will remove `EVENT_CLICK_DATA_API` event that should remain
25661       */
25662
25663      $__default["default"](document).off(EVENT_FOCUSIN);
25664      $__default["default"].removeData(this._element, DATA_KEY$5);
25665      this._config = null;
25666      this._element = null;
25667      this._dialog = null;
25668      this._backdrop = null;
25669      this._isShown = null;
25670      this._isBodyOverflowing = null;
25671      this._ignoreBackdropClick = null;
25672      this._isTransitioning = null;
25673      this._scrollbarWidth = null;
25674    };
25675
25676    _proto.handleUpdate = function handleUpdate() {
25677      this._adjustDialog();
25678    } // Private
25679    ;
25680
25681    _proto._getConfig = function _getConfig(config) {
25682      config = _extends({}, Default$4, config);
25683      Util.typeCheckConfig(NAME$5, config, DefaultType$4);
25684      return config;
25685    };
25686
25687    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
25688      var _this3 = this;
25689
25690      var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
25691      $__default["default"](this._element).trigger(hideEventPrevented);
25692
25693      if (hideEventPrevented.isDefaultPrevented()) {
25694        return;
25695      }
25696
25697      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
25698
25699      if (!isModalOverflowing) {
25700        this._element.style.overflowY = 'hidden';
25701      }
25702
25703      this._element.classList.add(CLASS_NAME_STATIC);
25704
25705      var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);
25706      $__default["default"](this._element).off(Util.TRANSITION_END);
25707      $__default["default"](this._element).one(Util.TRANSITION_END, function () {
25708        _this3._element.classList.remove(CLASS_NAME_STATIC);
25709
25710        if (!isModalOverflowing) {
25711          $__default["default"](_this3._element).one(Util.TRANSITION_END, function () {
25712            _this3._element.style.overflowY = '';
25713          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
25714        }
25715      }).emulateTransitionEnd(modalTransitionDuration);
25716
25717      this._element.focus();
25718    };
25719
25720    _proto._showElement = function _showElement(relatedTarget) {
25721      var _this4 = this;
25722
25723      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
25724      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
25725
25726      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
25727        // Don't move modal's DOM position
25728        document.body.appendChild(this._element);
25729      }
25730
25731      this._element.style.display = 'block';
25732
25733      this._element.removeAttribute('aria-hidden');
25734
25735      this._element.setAttribute('aria-modal', true);
25736
25737      this._element.setAttribute('role', 'dialog');
25738
25739      if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
25740        modalBody.scrollTop = 0;
25741      } else {
25742        this._element.scrollTop = 0;
25743      }
25744
25745      if (transition) {
25746        Util.reflow(this._element);
25747      }
25748
25749      $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4);
25750
25751      if (this._config.focus) {
25752        this._enforceFocus();
25753      }
25754
25755      var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, {
25756        relatedTarget: relatedTarget
25757      });
25758
25759      var transitionComplete = function transitionComplete() {
25760        if (_this4._config.focus) {
25761          _this4._element.focus();
25762        }
25763
25764        _this4._isTransitioning = false;
25765        $__default["default"](_this4._element).trigger(shownEvent);
25766      };
25767
25768      if (transition) {
25769        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
25770        $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
25771      } else {
25772        transitionComplete();
25773      }
25774    };
25775
25776    _proto._enforceFocus = function _enforceFocus() {
25777      var _this5 = this;
25778
25779      $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
25780      .on(EVENT_FOCUSIN, function (event) {
25781        if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
25782          _this5._element.focus();
25783        }
25784      });
25785    };
25786
25787    _proto._setEscapeEvent = function _setEscapeEvent() {
25788      var _this6 = this;
25789
25790      if (this._isShown) {
25791        $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
25792          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
25793            event.preventDefault();
25794
25795            _this6.hide();
25796          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
25797            _this6._triggerBackdropTransition();
25798          }
25799        });
25800      } else if (!this._isShown) {
25801        $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
25802      }
25803    };
25804
25805    _proto._setResizeEvent = function _setResizeEvent() {
25806      var _this7 = this;
25807
25808      if (this._isShown) {
25809        $__default["default"](window).on(EVENT_RESIZE, function (event) {
25810          return _this7.handleUpdate(event);
25811        });
25812      } else {
25813        $__default["default"](window).off(EVENT_RESIZE);
25814      }
25815    };
25816
25817    _proto._hideModal = function _hideModal() {
25818      var _this8 = this;
25819
25820      this._element.style.display = 'none';
25821
25822      this._element.setAttribute('aria-hidden', true);
25823
25824      this._element.removeAttribute('aria-modal');
25825
25826      this._element.removeAttribute('role');
25827
25828      this._isTransitioning = false;
25829
25830      this._showBackdrop(function () {
25831        $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
25832
25833        _this8._resetAdjustments();
25834
25835        _this8._resetScrollbar();
25836
25837        $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2);
25838      });
25839    };
25840
25841    _proto._removeBackdrop = function _removeBackdrop() {
25842      if (this._backdrop) {
25843        $__default["default"](this._backdrop).remove();
25844        this._backdrop = null;
25845      }
25846    };
25847
25848    _proto._showBackdrop = function _showBackdrop(callback) {
25849      var _this9 = this;
25850
25851      var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';
25852
25853      if (this._isShown && this._config.backdrop) {
25854        this._backdrop = document.createElement('div');
25855        this._backdrop.className = CLASS_NAME_BACKDROP;
25856
25857        if (animate) {
25858          this._backdrop.classList.add(animate);
25859        }
25860
25861        $__default["default"](this._backdrop).appendTo(document.body);
25862        $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {
25863          if (_this9._ignoreBackdropClick) {
25864            _this9._ignoreBackdropClick = false;
25865            return;
25866          }
25867
25868          if (event.target !== event.currentTarget) {
25869            return;
25870          }
25871
25872          if (_this9._config.backdrop === 'static') {
25873            _this9._triggerBackdropTransition();
25874          } else {
25875            _this9.hide();
25876          }
25877        });
25878
25879        if (animate) {
25880          Util.reflow(this._backdrop);
25881        }
25882
25883        $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4);
25884
25885        if (!callback) {
25886          return;
25887        }
25888
25889        if (!animate) {
25890          callback();
25891          return;
25892        }
25893
25894        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
25895        $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
25896      } else if (!this._isShown && this._backdrop) {
25897        $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);
25898
25899        var callbackRemove = function callbackRemove() {
25900          _this9._removeBackdrop();
25901
25902          if (callback) {
25903            callback();
25904          }
25905        };
25906
25907        if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
25908          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
25909
25910          $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
25911        } else {
25912          callbackRemove();
25913        }
25914      } else if (callback) {
25915        callback();
25916      }
25917    } // ----------------------------------------------------------------------
25918    // the following methods are used to handle overflowing modals
25919    // todo (fat): these should probably be refactored out of modal.js
25920    // ----------------------------------------------------------------------
25921    ;
25922
25923    _proto._adjustDialog = function _adjustDialog() {
25924      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
25925
25926      if (!this._isBodyOverflowing && isModalOverflowing) {
25927        this._element.style.paddingLeft = this._scrollbarWidth + "px";
25928      }
25929
25930      if (this._isBodyOverflowing && !isModalOverflowing) {
25931        this._element.style.paddingRight = this._scrollbarWidth + "px";
25932      }
25933    };
25934
25935    _proto._resetAdjustments = function _resetAdjustments() {
25936      this._element.style.paddingLeft = '';
25937      this._element.style.paddingRight = '';
25938    };
25939
25940    _proto._checkScrollbar = function _checkScrollbar() {
25941      var rect = document.body.getBoundingClientRect();
25942      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
25943      this._scrollbarWidth = this._getScrollbarWidth();
25944    };
25945
25946    _proto._setScrollbar = function _setScrollbar() {
25947      var _this10 = this;
25948
25949      if (this._isBodyOverflowing) {
25950        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
25951        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
25952        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
25953        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
25954
25955        $__default["default"](fixedContent).each(function (index, element) {
25956          var actualPadding = element.style.paddingRight;
25957          var calculatedPadding = $__default["default"](element).css('padding-right');
25958          $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
25959        }); // Adjust sticky content margin
25960
25961        $__default["default"](stickyContent).each(function (index, element) {
25962          var actualMargin = element.style.marginRight;
25963          var calculatedMargin = $__default["default"](element).css('margin-right');
25964          $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
25965        }); // Adjust body padding
25966
25967        var actualPadding = document.body.style.paddingRight;
25968        var calculatedPadding = $__default["default"](document.body).css('padding-right');
25969        $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
25970      }
25971
25972      $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
25973    };
25974
25975    _proto._resetScrollbar = function _resetScrollbar() {
25976      // Restore fixed content padding
25977      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
25978      $__default["default"](fixedContent).each(function (index, element) {
25979        var padding = $__default["default"](element).data('padding-right');
25980        $__default["default"](element).removeData('padding-right');
25981        element.style.paddingRight = padding ? padding : '';
25982      }); // Restore sticky content
25983
25984      var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
25985      $__default["default"](elements).each(function (index, element) {
25986        var margin = $__default["default"](element).data('margin-right');
25987
25988        if (typeof margin !== 'undefined') {
25989          $__default["default"](element).css('margin-right', margin).removeData('margin-right');
25990        }
25991      }); // Restore body padding
25992
25993      var padding = $__default["default"](document.body).data('padding-right');
25994      $__default["default"](document.body).removeData('padding-right');
25995      document.body.style.paddingRight = padding ? padding : '';
25996    };
25997
25998    _proto._getScrollbarWidth = function _getScrollbarWidth() {
25999      // thx d.walsh
26000      var scrollDiv = document.createElement('div');
26001      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
26002      document.body.appendChild(scrollDiv);
26003      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
26004      document.body.removeChild(scrollDiv);
26005      return scrollbarWidth;
26006    } // Static
26007    ;
26008
26009    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
26010      return this.each(function () {
26011        var data = $__default["default"](this).data(DATA_KEY$5);
26012
26013        var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
26014
26015        if (!data) {
26016          data = new Modal(this, _config);
26017          $__default["default"](this).data(DATA_KEY$5, data);
26018        }
26019
26020        if (typeof config === 'string') {
26021          if (typeof data[config] === 'undefined') {
26022            throw new TypeError("No method named \"" + config + "\"");
26023          }
26024
26025          data[config](relatedTarget);
26026        } else if (_config.show) {
26027          data.show(relatedTarget);
26028        }
26029      });
26030    };
26031
26032    _createClass(Modal, null, [{
26033      key: "VERSION",
26034      get: function get() {
26035        return VERSION$5;
26036      }
26037    }, {
26038      key: "Default",
26039      get: function get() {
26040        return Default$4;
26041      }
26042    }]);
26043
26044    return Modal;
26045  }();
26046  /**
26047   * Data API implementation
26048   */
26049
26050
26051  $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
26052    var _this11 = this;
26053
26054    var target;
26055    var selector = Util.getSelectorFromElement(this);
26056
26057    if (selector) {
26058      target = document.querySelector(selector);
26059    }
26060
26061    var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
26062
26063    if (this.tagName === 'A' || this.tagName === 'AREA') {
26064      event.preventDefault();
26065    }
26066
26067    var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) {
26068      if (showEvent.isDefaultPrevented()) {
26069        // Only register focus restorer if modal will actually get shown
26070        return;
26071      }
26072
26073      $target.one(EVENT_HIDDEN$2, function () {
26074        if ($__default["default"](_this11).is(':visible')) {
26075          _this11.focus();
26076        }
26077      });
26078    });
26079
26080    Modal._jQueryInterface.call($__default["default"](target), config, this);
26081  });
26082  /**
26083   * jQuery
26084   */
26085
26086  $__default["default"].fn[NAME$5] = Modal._jQueryInterface;
26087  $__default["default"].fn[NAME$5].Constructor = Modal;
26088
26089  $__default["default"].fn[NAME$5].noConflict = function () {
26090    $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;
26091    return Modal._jQueryInterface;
26092  };
26093
26094  /**
26095   * --------------------------------------------------------------------------
26096   * Bootstrap (v4.6.2): tools/sanitizer.js
26097   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
26098   * --------------------------------------------------------------------------
26099   */
26100  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
26101  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
26102  var DefaultWhitelist = {
26103    // Global attributes allowed on any supplied element below.
26104    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
26105    a: ['target', 'href', 'title', 'rel'],
26106    area: [],
26107    b: [],
26108    br: [],
26109    col: [],
26110    code: [],
26111    div: [],
26112    em: [],
26113    hr: [],
26114    h1: [],
26115    h2: [],
26116    h3: [],
26117    h4: [],
26118    h5: [],
26119    h6: [],
26120    i: [],
26121    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
26122    li: [],
26123    ol: [],
26124    p: [],
26125    pre: [],
26126    s: [],
26127    small: [],
26128    span: [],
26129    sub: [],
26130    sup: [],
26131    strong: [],
26132    u: [],
26133    ul: []
26134  };
26135  /**
26136   * A pattern that recognizes a commonly useful subset of URLs that are safe.
26137   *
26138   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
26139   */
26140
26141  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
26142  /**
26143   * A pattern that matches safe data URLs. Only matches image, video and audio types.
26144   *
26145   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
26146   */
26147
26148  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
26149
26150  function allowedAttribute(attr, allowedAttributeList) {
26151    var attrName = attr.nodeName.toLowerCase();
26152
26153    if (allowedAttributeList.indexOf(attrName) !== -1) {
26154      if (uriAttrs.indexOf(attrName) !== -1) {
26155        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
26156      }
26157
26158      return true;
26159    }
26160
26161    var regExp = allowedAttributeList.filter(function (attrRegex) {
26162      return attrRegex instanceof RegExp;
26163    }); // Check if a regular expression validates the attribute.
26164
26165    for (var i = 0, len = regExp.length; i < len; i++) {
26166      if (regExp[i].test(attrName)) {
26167        return true;
26168      }
26169    }
26170
26171    return false;
26172  }
26173
26174  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
26175    if (unsafeHtml.length === 0) {
26176      return unsafeHtml;
26177    }
26178
26179    if (sanitizeFn && typeof sanitizeFn === 'function') {
26180      return sanitizeFn(unsafeHtml);
26181    }
26182
26183    var domParser = new window.DOMParser();
26184    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
26185    var whitelistKeys = Object.keys(whiteList);
26186    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
26187
26188    var _loop = function _loop(i, len) {
26189      var el = elements[i];
26190      var elName = el.nodeName.toLowerCase();
26191
26192      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
26193        el.parentNode.removeChild(el);
26194        return "continue";
26195      }
26196
26197      var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread
26198
26199      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
26200      attributeList.forEach(function (attr) {
26201        if (!allowedAttribute(attr, whitelistedAttributes)) {
26202          el.removeAttribute(attr.nodeName);
26203        }
26204      });
26205    };
26206
26207    for (var i = 0, len = elements.length; i < len; i++) {
26208      var _ret = _loop(i);
26209
26210      if (_ret === "continue") continue;
26211    }
26212
26213    return createdDocument.body.innerHTML;
26214  }
26215
26216  /**
26217   * Constants
26218   */
26219
26220  var NAME$4 = 'tooltip';
26221  var VERSION$4 = '4.6.2';
26222  var DATA_KEY$4 = 'bs.tooltip';
26223  var EVENT_KEY$4 = "." + DATA_KEY$4;
26224  var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4];
26225  var CLASS_PREFIX$1 = 'bs-tooltip';
26226  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
26227  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
26228  var CLASS_NAME_FADE$3 = 'fade';
26229  var CLASS_NAME_SHOW$3 = 'show';
26230  var HOVER_STATE_SHOW = 'show';
26231  var HOVER_STATE_OUT = 'out';
26232  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
26233  var SELECTOR_ARROW = '.arrow';
26234  var TRIGGER_HOVER = 'hover';
26235  var TRIGGER_FOCUS = 'focus';
26236  var TRIGGER_CLICK = 'click';
26237  var TRIGGER_MANUAL = 'manual';
26238  var AttachmentMap = {
26239    AUTO: 'auto',
26240    TOP: 'top',
26241    RIGHT: 'right',
26242    BOTTOM: 'bottom',
26243    LEFT: 'left'
26244  };
26245  var Default$3 = {
26246    animation: true,
26247    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
26248    trigger: 'hover focus',
26249    title: '',
26250    delay: 0,
26251    html: false,
26252    selector: false,
26253    placement: 'top',
26254    offset: 0,
26255    container: false,
26256    fallbackPlacement: 'flip',
26257    boundary: 'scrollParent',
26258    customClass: '',
26259    sanitize: true,
26260    sanitizeFn: null,
26261    whiteList: DefaultWhitelist,
26262    popperConfig: null
26263  };
26264  var DefaultType$3 = {
26265    animation: 'boolean',
26266    template: 'string',
26267    title: '(string|element|function)',
26268    trigger: 'string',
26269    delay: '(number|object)',
26270    html: 'boolean',
26271    selector: '(string|boolean)',
26272    placement: '(string|function)',
26273    offset: '(number|string|function)',
26274    container: '(string|element|boolean)',
26275    fallbackPlacement: '(string|array)',
26276    boundary: '(string|element)',
26277    customClass: '(string|function)',
26278    sanitize: 'boolean',
26279    sanitizeFn: '(null|function)',
26280    whiteList: 'object',
26281    popperConfig: '(null|object)'
26282  };
26283  var Event$1 = {
26284    HIDE: "hide" + EVENT_KEY$4,
26285    HIDDEN: "hidden" + EVENT_KEY$4,
26286    SHOW: "show" + EVENT_KEY$4,
26287    SHOWN: "shown" + EVENT_KEY$4,
26288    INSERTED: "inserted" + EVENT_KEY$4,
26289    CLICK: "click" + EVENT_KEY$4,
26290    FOCUSIN: "focusin" + EVENT_KEY$4,
26291    FOCUSOUT: "focusout" + EVENT_KEY$4,
26292    MOUSEENTER: "mouseenter" + EVENT_KEY$4,
26293    MOUSELEAVE: "mouseleave" + EVENT_KEY$4
26294  };
26295  /**
26296   * Class definition
26297   */
26298
26299  var Tooltip = /*#__PURE__*/function () {
26300    function Tooltip(element, config) {
26301      if (typeof Popper__default["default"] === 'undefined') {
26302        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
26303      } // Private
26304
26305
26306      this._isEnabled = true;
26307      this._timeout = 0;
26308      this._hoverState = '';
26309      this._activeTrigger = {};
26310      this._popper = null; // Protected
26311
26312      this.element = element;
26313      this.config = this._getConfig(config);
26314      this.tip = null;
26315
26316      this._setListeners();
26317    } // Getters
26318
26319
26320    var _proto = Tooltip.prototype;
26321
26322    // Public
26323    _proto.enable = function enable() {
26324      this._isEnabled = true;
26325    };
26326
26327    _proto.disable = function disable() {
26328      this._isEnabled = false;
26329    };
26330
26331    _proto.toggleEnabled = function toggleEnabled() {
26332      this._isEnabled = !this._isEnabled;
26333    };
26334
26335    _proto.toggle = function toggle(event) {
26336      if (!this._isEnabled) {
26337        return;
26338      }
26339
26340      if (event) {
26341        var dataKey = this.constructor.DATA_KEY;
26342        var context = $__default["default"](event.currentTarget).data(dataKey);
26343
26344        if (!context) {
26345          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
26346          $__default["default"](event.currentTarget).data(dataKey, context);
26347        }
26348
26349        context._activeTrigger.click = !context._activeTrigger.click;
26350
26351        if (context._isWithActiveTrigger()) {
26352          context._enter(null, context);
26353        } else {
26354          context._leave(null, context);
26355        }
26356      } else {
26357        if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {
26358          this._leave(null, this);
26359
26360          return;
26361        }
26362
26363        this._enter(null, this);
26364      }
26365    };
26366
26367    _proto.dispose = function dispose() {
26368      clearTimeout(this._timeout);
26369      $__default["default"].removeData(this.element, this.constructor.DATA_KEY);
26370      $__default["default"](this.element).off(this.constructor.EVENT_KEY);
26371      $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
26372
26373      if (this.tip) {
26374        $__default["default"](this.tip).remove();
26375      }
26376
26377      this._isEnabled = null;
26378      this._timeout = null;
26379      this._hoverState = null;
26380      this._activeTrigger = null;
26381
26382      if (this._popper) {
26383        this._popper.destroy();
26384      }
26385
26386      this._popper = null;
26387      this.element = null;
26388      this.config = null;
26389      this.tip = null;
26390    };
26391
26392    _proto.show = function show() {
26393      var _this = this;
26394
26395      if ($__default["default"](this.element).css('display') === 'none') {
26396        throw new Error('Please use show on visible elements');
26397      }
26398
26399      var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
26400
26401      if (this.isWithContent() && this._isEnabled) {
26402        $__default["default"](this.element).trigger(showEvent);
26403        var shadowRoot = Util.findShadowRoot(this.element);
26404        var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
26405
26406        if (showEvent.isDefaultPrevented() || !isInTheDom) {
26407          return;
26408        }
26409
26410        var tip = this.getTipElement();
26411        var tipId = Util.getUID(this.constructor.NAME);
26412        tip.setAttribute('id', tipId);
26413        this.element.setAttribute('aria-describedby', tipId);
26414        this.setContent();
26415
26416        if (this.config.animation) {
26417          $__default["default"](tip).addClass(CLASS_NAME_FADE$3);
26418        }
26419
26420        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
26421
26422        var attachment = this._getAttachment(placement);
26423
26424        this.addAttachmentClass(attachment);
26425
26426        var container = this._getContainer();
26427
26428        $__default["default"](tip).data(this.constructor.DATA_KEY, this);
26429
26430        if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) {
26431          $__default["default"](tip).appendTo(container);
26432        }
26433
26434        $__default["default"](this.element).trigger(this.constructor.Event.INSERTED);
26435        this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment));
26436        $__default["default"](tip).addClass(CLASS_NAME_SHOW$3);
26437        $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra
26438        // empty mouseover listeners to the body's immediate children;
26439        // only needed because of broken event delegation on iOS
26440        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
26441
26442        if ('ontouchstart' in document.documentElement) {
26443          $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
26444        }
26445
26446        var complete = function complete() {
26447          if (_this.config.animation) {
26448            _this._fixTransition();
26449          }
26450
26451          var prevHoverState = _this._hoverState;
26452          _this._hoverState = null;
26453          $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN);
26454
26455          if (prevHoverState === HOVER_STATE_OUT) {
26456            _this._leave(null, _this);
26457          }
26458        };
26459
26460        if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
26461          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
26462          $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
26463        } else {
26464          complete();
26465        }
26466      }
26467    };
26468
26469    _proto.hide = function hide(callback) {
26470      var _this2 = this;
26471
26472      var tip = this.getTipElement();
26473      var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
26474
26475      var complete = function complete() {
26476        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
26477          tip.parentNode.removeChild(tip);
26478        }
26479
26480        _this2._cleanTipClass();
26481
26482        _this2.element.removeAttribute('aria-describedby');
26483
26484        $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
26485
26486        if (_this2._popper !== null) {
26487          _this2._popper.destroy();
26488        }
26489
26490        if (callback) {
26491          callback();
26492        }
26493      };
26494
26495      $__default["default"](this.element).trigger(hideEvent);
26496
26497      if (hideEvent.isDefaultPrevented()) {
26498        return;
26499      }
26500
26501      $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra
26502      // empty mouseover listeners we added for iOS support
26503
26504      if ('ontouchstart' in document.documentElement) {
26505        $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
26506      }
26507
26508      this._activeTrigger[TRIGGER_CLICK] = false;
26509      this._activeTrigger[TRIGGER_FOCUS] = false;
26510      this._activeTrigger[TRIGGER_HOVER] = false;
26511
26512      if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
26513        var transitionDuration = Util.getTransitionDurationFromElement(tip);
26514        $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
26515      } else {
26516        complete();
26517      }
26518
26519      this._hoverState = '';
26520    };
26521
26522    _proto.update = function update() {
26523      if (this._popper !== null) {
26524        this._popper.scheduleUpdate();
26525      }
26526    } // Protected
26527    ;
26528
26529    _proto.isWithContent = function isWithContent() {
26530      return Boolean(this.getTitle());
26531    };
26532
26533    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
26534      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
26535    };
26536
26537    _proto.getTipElement = function getTipElement() {
26538      this.tip = this.tip || $__default["default"](this.config.template)[0];
26539      return this.tip;
26540    };
26541
26542    _proto.setContent = function setContent() {
26543      var tip = this.getTipElement();
26544      this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
26545      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3);
26546    };
26547
26548    _proto.setElementContent = function setElementContent($element, content) {
26549      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
26550        // Content is a DOM node or a jQuery
26551        if (this.config.html) {
26552          if (!$__default["default"](content).parent().is($element)) {
26553            $element.empty().append(content);
26554          }
26555        } else {
26556          $element.text($__default["default"](content).text());
26557        }
26558
26559        return;
26560      }
26561
26562      if (this.config.html) {
26563        if (this.config.sanitize) {
26564          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
26565        }
26566
26567        $element.html(content);
26568      } else {
26569        $element.text(content);
26570      }
26571    };
26572
26573    _proto.getTitle = function getTitle() {
26574      var title = this.element.getAttribute('data-original-title');
26575
26576      if (!title) {
26577        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
26578      }
26579
26580      return title;
26581    } // Private
26582    ;
26583
26584    _proto._getPopperConfig = function _getPopperConfig(attachment) {
26585      var _this3 = this;
26586
26587      var defaultBsConfig = {
26588        placement: attachment,
26589        modifiers: {
26590          offset: this._getOffset(),
26591          flip: {
26592            behavior: this.config.fallbackPlacement
26593          },
26594          arrow: {
26595            element: SELECTOR_ARROW
26596          },
26597          preventOverflow: {
26598            boundariesElement: this.config.boundary
26599          }
26600        },
26601        onCreate: function onCreate(data) {
26602          if (data.originalPlacement !== data.placement) {
26603            _this3._handlePopperPlacementChange(data);
26604          }
26605        },
26606        onUpdate: function onUpdate(data) {
26607          return _this3._handlePopperPlacementChange(data);
26608        }
26609      };
26610      return _extends({}, defaultBsConfig, this.config.popperConfig);
26611    };
26612
26613    _proto._getOffset = function _getOffset() {
26614      var _this4 = this;
26615
26616      var offset = {};
26617
26618      if (typeof this.config.offset === 'function') {
26619        offset.fn = function (data) {
26620          data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));
26621          return data;
26622        };
26623      } else {
26624        offset.offset = this.config.offset;
26625      }
26626
26627      return offset;
26628    };
26629
26630    _proto._getContainer = function _getContainer() {
26631      if (this.config.container === false) {
26632        return document.body;
26633      }
26634
26635      if (Util.isElement(this.config.container)) {
26636        return $__default["default"](this.config.container);
26637      }
26638
26639      return $__default["default"](document).find(this.config.container);
26640    };
26641
26642    _proto._getAttachment = function _getAttachment(placement) {
26643      return AttachmentMap[placement.toUpperCase()];
26644    };
26645
26646    _proto._setListeners = function _setListeners() {
26647      var _this5 = this;
26648
26649      var triggers = this.config.trigger.split(' ');
26650      triggers.forEach(function (trigger) {
26651        if (trigger === 'click') {
26652          $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
26653            return _this5.toggle(event);
26654          });
26655        } else if (trigger !== TRIGGER_MANUAL) {
26656          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
26657          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
26658          $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) {
26659            return _this5._enter(event);
26660          }).on(eventOut, _this5.config.selector, function (event) {
26661            return _this5._leave(event);
26662          });
26663        }
26664      });
26665
26666      this._hideModalHandler = function () {
26667        if (_this5.element) {
26668          _this5.hide();
26669        }
26670      };
26671
26672      $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
26673
26674      if (this.config.selector) {
26675        this.config = _extends({}, this.config, {
26676          trigger: 'manual',
26677          selector: ''
26678        });
26679      } else {
26680        this._fixTitle();
26681      }
26682    };
26683
26684    _proto._fixTitle = function _fixTitle() {
26685      var titleType = typeof this.element.getAttribute('data-original-title');
26686
26687      if (this.element.getAttribute('title') || titleType !== 'string') {
26688        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
26689        this.element.setAttribute('title', '');
26690      }
26691    };
26692
26693    _proto._enter = function _enter(event, context) {
26694      var dataKey = this.constructor.DATA_KEY;
26695      context = context || $__default["default"](event.currentTarget).data(dataKey);
26696
26697      if (!context) {
26698        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
26699        $__default["default"](event.currentTarget).data(dataKey, context);
26700      }
26701
26702      if (event) {
26703        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
26704      }
26705
26706      if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {
26707        context._hoverState = HOVER_STATE_SHOW;
26708        return;
26709      }
26710
26711      clearTimeout(context._timeout);
26712      context._hoverState = HOVER_STATE_SHOW;
26713
26714      if (!context.config.delay || !context.config.delay.show) {
26715        context.show();
26716        return;
26717      }
26718
26719      context._timeout = setTimeout(function () {
26720        if (context._hoverState === HOVER_STATE_SHOW) {
26721          context.show();
26722        }
26723      }, context.config.delay.show);
26724    };
26725
26726    _proto._leave = function _leave(event, context) {
26727      var dataKey = this.constructor.DATA_KEY;
26728      context = context || $__default["default"](event.currentTarget).data(dataKey);
26729
26730      if (!context) {
26731        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
26732        $__default["default"](event.currentTarget).data(dataKey, context);
26733      }
26734
26735      if (event) {
26736        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
26737      }
26738
26739      if (context._isWithActiveTrigger()) {
26740        return;
26741      }
26742
26743      clearTimeout(context._timeout);
26744      context._hoverState = HOVER_STATE_OUT;
26745
26746      if (!context.config.delay || !context.config.delay.hide) {
26747        context.hide();
26748        return;
26749      }
26750
26751      context._timeout = setTimeout(function () {
26752        if (context._hoverState === HOVER_STATE_OUT) {
26753          context.hide();
26754        }
26755      }, context.config.delay.hide);
26756    };
26757
26758    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
26759      for (var trigger in this._activeTrigger) {
26760        if (this._activeTrigger[trigger]) {
26761          return true;
26762        }
26763      }
26764
26765      return false;
26766    };
26767
26768    _proto._getConfig = function _getConfig(config) {
26769      var dataAttributes = $__default["default"](this.element).data();
26770      Object.keys(dataAttributes).forEach(function (dataAttr) {
26771        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
26772          delete dataAttributes[dataAttr];
26773        }
26774      });
26775      config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
26776
26777      if (typeof config.delay === 'number') {
26778        config.delay = {
26779          show: config.delay,
26780          hide: config.delay
26781        };
26782      }
26783
26784      if (typeof config.title === 'number') {
26785        config.title = config.title.toString();
26786      }
26787
26788      if (typeof config.content === 'number') {
26789        config.content = config.content.toString();
26790      }
26791
26792      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
26793
26794      if (config.sanitize) {
26795        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
26796      }
26797
26798      return config;
26799    };
26800
26801    _proto._getDelegateConfig = function _getDelegateConfig() {
26802      var config = {};
26803
26804      if (this.config) {
26805        for (var key in this.config) {
26806          if (this.constructor.Default[key] !== this.config[key]) {
26807            config[key] = this.config[key];
26808          }
26809        }
26810      }
26811
26812      return config;
26813    };
26814
26815    _proto._cleanTipClass = function _cleanTipClass() {
26816      var $tip = $__default["default"](this.getTipElement());
26817      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
26818
26819      if (tabClass !== null && tabClass.length) {
26820        $tip.removeClass(tabClass.join(''));
26821      }
26822    };
26823
26824    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
26825      this.tip = popperData.instance.popper;
26826
26827      this._cleanTipClass();
26828
26829      this.addAttachmentClass(this._getAttachment(popperData.placement));
26830    };
26831
26832    _proto._fixTransition = function _fixTransition() {
26833      var tip = this.getTipElement();
26834      var initConfigAnimation = this.config.animation;
26835
26836      if (tip.getAttribute('x-placement') !== null) {
26837        return;
26838      }
26839
26840      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3);
26841      this.config.animation = false;
26842      this.hide();
26843      this.show();
26844      this.config.animation = initConfigAnimation;
26845    } // Static
26846    ;
26847
26848    Tooltip._jQueryInterface = function _jQueryInterface(config) {
26849      return this.each(function () {
26850        var $element = $__default["default"](this);
26851        var data = $element.data(DATA_KEY$4);
26852
26853        var _config = typeof config === 'object' && config;
26854
26855        if (!data && /dispose|hide/.test(config)) {
26856          return;
26857        }
26858
26859        if (!data) {
26860          data = new Tooltip(this, _config);
26861          $element.data(DATA_KEY$4, data);
26862        }
26863
26864        if (typeof config === 'string') {
26865          if (typeof data[config] === 'undefined') {
26866            throw new TypeError("No method named \"" + config + "\"");
26867          }
26868
26869          data[config]();
26870        }
26871      });
26872    };
26873
26874    _createClass(Tooltip, null, [{
26875      key: "VERSION",
26876      get: function get() {
26877        return VERSION$4;
26878      }
26879    }, {
26880      key: "Default",
26881      get: function get() {
26882        return Default$3;
26883      }
26884    }, {
26885      key: "NAME",
26886      get: function get() {
26887        return NAME$4;
26888      }
26889    }, {
26890      key: "DATA_KEY",
26891      get: function get() {
26892        return DATA_KEY$4;
26893      }
26894    }, {
26895      key: "Event",
26896      get: function get() {
26897        return Event$1;
26898      }
26899    }, {
26900      key: "EVENT_KEY",
26901      get: function get() {
26902        return EVENT_KEY$4;
26903      }
26904    }, {
26905      key: "DefaultType",
26906      get: function get() {
26907        return DefaultType$3;
26908      }
26909    }]);
26910
26911    return Tooltip;
26912  }();
26913  /**
26914   * jQuery
26915   */
26916
26917
26918  $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface;
26919  $__default["default"].fn[NAME$4].Constructor = Tooltip;
26920
26921  $__default["default"].fn[NAME$4].noConflict = function () {
26922    $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;
26923    return Tooltip._jQueryInterface;
26924  };
26925
26926  /**
26927   * Constants
26928   */
26929
26930  var NAME$3 = 'popover';
26931  var VERSION$3 = '4.6.2';
26932  var DATA_KEY$3 = 'bs.popover';
26933  var EVENT_KEY$3 = "." + DATA_KEY$3;
26934  var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3];
26935  var CLASS_PREFIX = 'bs-popover';
26936  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
26937  var CLASS_NAME_FADE$2 = 'fade';
26938  var CLASS_NAME_SHOW$2 = 'show';
26939  var SELECTOR_TITLE = '.popover-header';
26940  var SELECTOR_CONTENT = '.popover-body';
26941
26942  var Default$2 = _extends({}, Tooltip.Default, {
26943    placement: 'right',
26944    trigger: 'click',
26945    content: '',
26946    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
26947  });
26948
26949  var DefaultType$2 = _extends({}, Tooltip.DefaultType, {
26950    content: '(string|element|function)'
26951  });
26952
26953  var Event = {
26954    HIDE: "hide" + EVENT_KEY$3,
26955    HIDDEN: "hidden" + EVENT_KEY$3,
26956    SHOW: "show" + EVENT_KEY$3,
26957    SHOWN: "shown" + EVENT_KEY$3,
26958    INSERTED: "inserted" + EVENT_KEY$3,
26959    CLICK: "click" + EVENT_KEY$3,
26960    FOCUSIN: "focusin" + EVENT_KEY$3,
26961    FOCUSOUT: "focusout" + EVENT_KEY$3,
26962    MOUSEENTER: "mouseenter" + EVENT_KEY$3,
26963    MOUSELEAVE: "mouseleave" + EVENT_KEY$3
26964  };
26965  /**
26966   * Class definition
26967   */
26968
26969  var Popover = /*#__PURE__*/function (_Tooltip) {
26970    _inheritsLoose(Popover, _Tooltip);
26971
26972    function Popover() {
26973      return _Tooltip.apply(this, arguments) || this;
26974    }
26975
26976    var _proto = Popover.prototype;
26977
26978    // Overrides
26979    _proto.isWithContent = function isWithContent() {
26980      return this.getTitle() || this._getContent();
26981    };
26982
26983    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
26984      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
26985    };
26986
26987    _proto.getTipElement = function getTipElement() {
26988      this.tip = this.tip || $__default["default"](this.config.template)[0];
26989      return this.tip;
26990    };
26991
26992    _proto.setContent = function setContent() {
26993      var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events
26994
26995      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
26996
26997      var content = this._getContent();
26998
26999      if (typeof content === 'function') {
27000        content = content.call(this.element);
27001      }
27002
27003      this.setElementContent($tip.find(SELECTOR_CONTENT), content);
27004      $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2);
27005    } // Private
27006    ;
27007
27008    _proto._getContent = function _getContent() {
27009      return this.element.getAttribute('data-content') || this.config.content;
27010    };
27011
27012    _proto._cleanTipClass = function _cleanTipClass() {
27013      var $tip = $__default["default"](this.getTipElement());
27014      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
27015
27016      if (tabClass !== null && tabClass.length > 0) {
27017        $tip.removeClass(tabClass.join(''));
27018      }
27019    } // Static
27020    ;
27021
27022    Popover._jQueryInterface = function _jQueryInterface(config) {
27023      return this.each(function () {
27024        var data = $__default["default"](this).data(DATA_KEY$3);
27025
27026        var _config = typeof config === 'object' ? config : null;
27027
27028        if (!data && /dispose|hide/.test(config)) {
27029          return;
27030        }
27031
27032        if (!data) {
27033          data = new Popover(this, _config);
27034          $__default["default"](this).data(DATA_KEY$3, data);
27035        }
27036
27037        if (typeof config === 'string') {
27038          if (typeof data[config] === 'undefined') {
27039            throw new TypeError("No method named \"" + config + "\"");
27040          }
27041
27042          data[config]();
27043        }
27044      });
27045    };
27046
27047    _createClass(Popover, null, [{
27048      key: "VERSION",
27049      get: // Getters
27050      function get() {
27051        return VERSION$3;
27052      }
27053    }, {
27054      key: "Default",
27055      get: function get() {
27056        return Default$2;
27057      }
27058    }, {
27059      key: "NAME",
27060      get: function get() {
27061        return NAME$3;
27062      }
27063    }, {
27064      key: "DATA_KEY",
27065      get: function get() {
27066        return DATA_KEY$3;
27067      }
27068    }, {
27069      key: "Event",
27070      get: function get() {
27071        return Event;
27072      }
27073    }, {
27074      key: "EVENT_KEY",
27075      get: function get() {
27076        return EVENT_KEY$3;
27077      }
27078    }, {
27079      key: "DefaultType",
27080      get: function get() {
27081        return DefaultType$2;
27082      }
27083    }]);
27084
27085    return Popover;
27086  }(Tooltip);
27087  /**
27088   * jQuery
27089   */
27090
27091
27092  $__default["default"].fn[NAME$3] = Popover._jQueryInterface;
27093  $__default["default"].fn[NAME$3].Constructor = Popover;
27094
27095  $__default["default"].fn[NAME$3].noConflict = function () {
27096    $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;
27097    return Popover._jQueryInterface;
27098  };
27099
27100  /**
27101   * Constants
27102   */
27103
27104  var NAME$2 = 'scrollspy';
27105  var VERSION$2 = '4.6.2';
27106  var DATA_KEY$2 = 'bs.scrollspy';
27107  var EVENT_KEY$2 = "." + DATA_KEY$2;
27108  var DATA_API_KEY$1 = '.data-api';
27109  var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2];
27110  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
27111  var CLASS_NAME_ACTIVE$1 = 'active';
27112  var EVENT_ACTIVATE = "activate" + EVENT_KEY$2;
27113  var EVENT_SCROLL = "scroll" + EVENT_KEY$2;
27114  var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1;
27115  var METHOD_OFFSET = 'offset';
27116  var METHOD_POSITION = 'position';
27117  var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
27118  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
27119  var SELECTOR_NAV_LINKS = '.nav-link';
27120  var SELECTOR_NAV_ITEMS = '.nav-item';
27121  var SELECTOR_LIST_ITEMS = '.list-group-item';
27122  var SELECTOR_DROPDOWN$1 = '.dropdown';
27123  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
27124  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
27125  var Default$1 = {
27126    offset: 10,
27127    method: 'auto',
27128    target: ''
27129  };
27130  var DefaultType$1 = {
27131    offset: 'number',
27132    method: 'string',
27133    target: '(string|element)'
27134  };
27135  /**
27136   * Class definition
27137   */
27138
27139  var ScrollSpy = /*#__PURE__*/function () {
27140    function ScrollSpy(element, config) {
27141      var _this = this;
27142
27143      this._element = element;
27144      this._scrollElement = element.tagName === 'BODY' ? window : element;
27145      this._config = this._getConfig(config);
27146      this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
27147      this._offsets = [];
27148      this._targets = [];
27149      this._activeTarget = null;
27150      this._scrollHeight = 0;
27151      $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) {
27152        return _this._process(event);
27153      });
27154      this.refresh();
27155
27156      this._process();
27157    } // Getters
27158
27159
27160    var _proto = ScrollSpy.prototype;
27161
27162    // Public
27163    _proto.refresh = function refresh() {
27164      var _this2 = this;
27165
27166      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
27167      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
27168      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
27169      this._offsets = [];
27170      this._targets = [];
27171      this._scrollHeight = this._getScrollHeight();
27172      var targets = [].slice.call(document.querySelectorAll(this._selector));
27173      targets.map(function (element) {
27174        var target;
27175        var targetSelector = Util.getSelectorFromElement(element);
27176
27177        if (targetSelector) {
27178          target = document.querySelector(targetSelector);
27179        }
27180
27181        if (target) {
27182          var targetBCR = target.getBoundingClientRect();
27183
27184          if (targetBCR.width || targetBCR.height) {
27185            // TODO (fat): remove sketch reliance on jQuery position/offset
27186            return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector];
27187          }
27188        }
27189
27190        return null;
27191      }
27191).filter(Boolean).sort(function (a, b) {
27192        return a[0] - b[0];
27193      }).forEach(function (item) {
27194        _this2._offsets.push(item[0]);
27195
27196        _this2._targets.push(item[1]);
27197      });
27198    };
27199
27200    _proto.dispose = function dispose() {
27201      $__default["default"].removeData(this._element, DATA_KEY$2);
27202      $__default["default"](this._scrollElement).off(EVENT_KEY$2);
27203      this._element = null;
27204      this._scrollElement = null;
27205      this._config = null;
27206      this._selector = null;
27207      this._offsets = null;
27208      this._targets = null;
27209      this._activeTarget = null;
27210      this._scrollHeight = null;
27211    } // Private
27212    ;
27213
27214    _proto._getConfig = function _getConfig(config) {
27215      config = _extends({}, Default$1, typeof config === 'object' && config ? config : {});
27216
27217      if (typeof config.target !== 'string' && Util.isElement(config.target)) {
27218        var id = $__default["default"](config.target).attr('id');
27219
27220        if (!id) {
27221          id = Util.getUID(NAME$2);
27222          $__default["default"](config.target).attr('id', id);
27223        }
27224
27225        config.target = "#" + id;
27226      }
27227
27228      Util.typeCheckConfig(NAME$2, config, DefaultType$1);
27229      return config;
27230    };
27231
27232    _proto._getScrollTop = function _getScrollTop() {
27233      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
27234    };
27235
27236    _proto._getScrollHeight = function _getScrollHeight() {
27237      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
27238    };
27239
27240    _proto._getOffsetHeight = function _getOffsetHeight() {
27241      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
27242    };
27243
27244    _proto._process = function _process() {
27245      var scrollTop = this._getScrollTop() + this._config.offset;
27246
27247      var scrollHeight = this._getScrollHeight();
27248
27249      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
27250
27251      if (this._scrollHeight !== scrollHeight) {
27252        this.refresh();
27253      }
27254
27255      if (scrollTop >= maxScroll) {
27256        var target = this._targets[this._targets.length - 1];
27257
27258        if (this._activeTarget !== target) {
27259          this._activate(target);
27260        }
27261
27262        return;
27263      }
27264
27265      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
27266        this._activeTarget = null;
27267
27268        this._clear();
27269
27270        return;
27271      }
27272
27273      for (var i = this._offsets.length; i--;) {
27274        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
27275
27276        if (isActiveTarget) {
27277          this._activate(this._targets[i]);
27278        }
27279      }
27280    };
27281
27282    _proto._activate = function _activate(target) {
27283      this._activeTarget = target;
27284
27285      this._clear();
27286
27287      var queries = this._selector.split(',').map(function (selector) {
27288        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
27289      });
27290
27291      var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(','))));
27292
27293      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
27294        $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);
27295        $link.addClass(CLASS_NAME_ACTIVE$1);
27296      } else {
27297        // Set triggered link as active
27298        $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active
27299        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
27300
27301        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item
27302
27303        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);
27304      }
27305
27306      $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, {
27307        relatedTarget: target
27308      });
27309    };
27310
27311    _proto._clear = function _clear() {
27312      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
27313        return node.classList.contains(CLASS_NAME_ACTIVE$1);
27314      }
27314).forEach(function (node) {
27315        return node.classList.remove(CLASS_NAME_ACTIVE$1);
27316      });
27317    } // Static
27318    ;
27319
27320    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
27321      return this.each(function () {
27322        var data = $__default["default"](this).data(DATA_KEY$2);
27323
27324        var _config = typeof config === 'object' && config;
27325
27326        if (!data) {
27327          data = new ScrollSpy(this, _config);
27328          $__default["default"](this).data(DATA_KEY$2, data);
27329        }
27330
27331        if (typeof config === 'string') {
27332          if (typeof data[config] === 'undefined') {
27333            throw new TypeError("No method named \"" + config + "\"");
27334          }
27335
27336          data[config]();
27337        }
27338      });
27339    };
27340
27341    _createClass(ScrollSpy, null, [{
27342      key: "VERSION",
27343      get: function get() {
27344        return VERSION$2;
27345      }
27346    }, {
27347      key: "Default",
27348      get: function get() {
27349        return Default$1;
27350      }
27351    }]);
27352
27353    return ScrollSpy;
27354  }();
27355  /**
27356   * Data API implementation
27357   */
27358
27359
27360  $__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
27361    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
27362    var scrollSpysLength = scrollSpys.length;
27363
27364    for (var i = scrollSpysLength; i--;) {
27365      var $spy = $__default["default"](scrollSpys[i]);
27366
27367      ScrollSpy._jQueryInterface.call($spy, $spy.data());
27368    }
27369  });
27370  /**
27371   * jQuery
27372   */
27373
27374  $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface;
27375  $__default["default"].fn[NAME$2].Constructor = ScrollSpy;
27376
27377  $__default["default"].fn[NAME$2].noConflict = function () {
27378    $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;
27379    return ScrollSpy._jQueryInterface;
27380  };
27381
27382  /**
27383   * Constants
27384   */
27385
27386  var NAME$1 = 'tab';
27387  var VERSION$1 = '4.6.2';
27388  var DATA_KEY$1 = 'bs.tab';
27389  var EVENT_KEY$1 = "." + DATA_KEY$1;
27390  var DATA_API_KEY = '.data-api';
27391  var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1];
27392  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
27393  var CLASS_NAME_ACTIVE = 'active';
27394  var CLASS_NAME_DISABLED = 'disabled';
27395  var CLASS_NAME_FADE$1 = 'fade';
27396  var CLASS_NAME_SHOW$1 = 'show';
27397  var EVENT_HIDE$1 = "hide" + EVENT_KEY$1;
27398  var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1;
27399  var EVENT_SHOW$1 = "show" + EVENT_KEY$1;
27400  var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1;
27401  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY;
27402  var SELECTOR_DROPDOWN = '.dropdown';
27403  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
27404  var SELECTOR_ACTIVE = '.active';
27405  var SELECTOR_ACTIVE_UL = '> li > .active';
27406  var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
27407  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
27408  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
27409  /**
27410   * Class definition
27411   */
27412
27413  var Tab = /*#__PURE__*/function () {
27414    function Tab(element) {
27415      this._element = element;
27416    } // Getters
27417
27418
27419    var _proto = Tab.prototype;
27420
27421    // Public
27422    _proto.show = function show() {
27423      var _this = this;
27424
27425      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {
27426        return;
27427      }
27428
27429      var target;
27430      var previous;
27431      var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
27432      var selector = Util.getSelectorFromElement(this._element);
27433
27434      if (listElement) {
27435        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
27436        previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector));
27437        previous = previous[previous.length - 1];
27438      }
27439
27440      var hideEvent = $__default["default"].Event(EVENT_HIDE$1, {
27441        relatedTarget: this._element
27442      });
27443      var showEvent = $__default["default"].Event(EVENT_SHOW$1, {
27444        relatedTarget: previous
27445      });
27446
27447      if (previous) {
27448        $__default["default"](previous).trigger(hideEvent);
27449      }
27450
27451      $__default["default"](this._element).trigger(showEvent);
27452
27453      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
27454        return;
27455      }
27456
27457      if (selector) {
27458        target = document.querySelector(selector);
27459      }
27460
27461      this._activate(this._element, listElement);
27462
27463      var complete = function complete() {
27464        var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, {
27465          relatedTarget: _this._element
27466        });
27467        var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, {
27468          relatedTarget: previous
27469        });
27470        $__default["default"](previous).trigger(hiddenEvent);
27471        $__default["default"](_this._element).trigger(shownEvent);
27472      };
27473
27474      if (target) {
27475        this._activate(target, target.parentNode, complete);
27476      } else {
27477        complete();
27478      }
27479    };
27480
27481    _proto.dispose = function dispose() {
27482      $__default["default"].removeData(this._element, DATA_KEY$1);
27483      this._element = null;
27484    } // Private
27485    ;
27486
27487    _proto._activate = function _activate(element, container, callback) {
27488      var _this2 = this;
27489
27490      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE);
27491      var active = activeElements[0];
27492      var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1);
27493
27494      var complete = function complete() {
27495        return _this2._transitionComplete(element, active, callback);
27496      };
27497
27498      if (active && isTransitioning) {
27499        var transitionDuration = Util.getTransitionDurationFromElement(active);
27500        $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
27501      } else {
27502        complete();
27503      }
27504    };
27505
27506    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
27507      if (active) {
27508        $__default["default"](active).removeClass(CLASS_NAME_ACTIVE);
27509        var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
27510
27511        if (dropdownChild) {
27512          $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
27513        }
27514
27515        if (active.getAttribute('role') === 'tab') {
27516          active.setAttribute('aria-selected', false);
27517        }
27518      }
27519
27520      $__default["default"](element).addClass(CLASS_NAME_ACTIVE);
27521
27522      if (element.getAttribute('role') === 'tab') {
27523        element.setAttribute('aria-selected', true);
27524      }
27525
27526      Util.reflow(element);
27527
27528      if (element.classList.contains(CLASS_NAME_FADE$1)) {
27529        element.classList.add(CLASS_NAME_SHOW$1);
27530      }
27531
27532      var parent = element.parentNode;
27533
27534      if (parent && parent.nodeName === 'LI') {
27535        parent = parent.parentNode;
27536      }
27537
27538      if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
27539        var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0];
27540
27541        if (dropdownElement) {
27542          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
27543          $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
27544        }
27545
27546        element.setAttribute('aria-expanded', true);
27547      }
27548
27549      if (callback) {
27550        callback();
27551      }
27552    } // Static
27553    ;
27554
27555    Tab._jQueryInterface = function _jQueryInterface(config) {
27556      return this.each(function () {
27557        var $this = $__default["default"](this);
27558        var data = $this.data(DATA_KEY$1);
27559
27560        if (!data) {
27561          data = new Tab(this);
27562          $this.data(DATA_KEY$1, data);
27563        }
27564
27565        if (typeof config === 'string') {
27566          if (typeof data[config] === 'undefined') {
27567            throw new TypeError("No method named \"" + config + "\"");
27568          }
27569
27570          data[config]();
27571        }
27572      });
27573    };
27574
27575    _createClass(Tab, null, [{
27576      key: "VERSION",
27577      get: function get() {
27578        return VERSION$1;
27579      }
27580    }]);
27581
27582    return Tab;
27583  }();
27584  /**
27585   * Data API implementation
27586   */
27587
27588
27589  $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
27590    event.preventDefault();
27591
27592    Tab._jQueryInterface.call($__default["default"](this), 'show');
27593  });
27594  /**
27595   * jQuery
27596   */
27597
27598  $__default["default"].fn[NAME$1] = Tab._jQueryInterface;
27599  $__default["default"].fn[NAME$1].Constructor = Tab;
27600
27601  $__default["default"].fn[NAME$1].noConflict = function () {
27602    $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;
27603    return Tab._jQueryInterface;
27604  };
27605
27606  /**
27607   * Constants
27608   */
27609
27610  var NAME = 'toast';
27611  var VERSION = '4.6.2';
27612  var DATA_KEY = 'bs.toast';
27613  var EVENT_KEY = "." + DATA_KEY;
27614  var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
27615  var CLASS_NAME_FADE = 'fade';
27616  var CLASS_NAME_HIDE = 'hide';
27617  var CLASS_NAME_SHOW = 'show';
27618  var CLASS_NAME_SHOWING = 'showing';
27619  var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
27620  var EVENT_HIDE = "hide" + EVENT_KEY;
27621  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
27622  var EVENT_SHOW = "show" + EVENT_KEY;
27623  var EVENT_SHOWN = "shown" + EVENT_KEY;
27624  var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
27625  var Default = {
27626    animation: true,
27627    autohide: true,
27628    delay: 500
27629  };
27630  var DefaultType = {
27631    animation: 'boolean',
27632    autohide: 'boolean',
27633    delay: 'number'
27634  };
27635  /**
27636   * Class definition
27637   */
27638
27639  var Toast = /*#__PURE__*/function () {
27640    function Toast(element, config) {
27641      this._element = element;
27642      this._config = this._getConfig(config);
27643      this._timeout = null;
27644
27645      this._setListeners();
27646    } // Getters
27647
27648
27649    var _proto = Toast.prototype;
27650
27651    // Public
27652    _proto.show = function show() {
27653      var _this = this;
27654
27655      var showEvent = $__default["default"].Event(EVENT_SHOW);
27656      $__default["default"](this._element).trigger(showEvent);
27657
27658      if (showEvent.isDefaultPrevented()) {
27659        return;
27660      }
27661
27662      this._clearTimeout();
27663
27664      if (this._config.animation) {
27665        this._element.classList.add(CLASS_NAME_FADE);
27666      }
27667
27668      var complete = function complete() {
27669        _this._element.classList.remove(CLASS_NAME_SHOWING);
27670
27671        _this._element.classList.add(CLASS_NAME_SHOW);
27672
27673        $__default["default"](_this._element).trigger(EVENT_SHOWN);
27674
27675        if (_this._config.autohide) {
27676          _this._timeout = setTimeout(function () {
27677            _this.hide();
27678          }, _this._config.delay);
27679        }
27680      };
27681
27682      this._element.classList.remove(CLASS_NAME_HIDE);
27683
27684      Util.reflow(this._element);
27685
27686      this._element.classList.add(CLASS_NAME_SHOWING);
27687
27688      if (this._config.animation) {
27689        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
27690        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
27691      } else {
27692        complete();
27693      }
27694    };
27695
27696    _proto.hide = function hide() {
27697      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
27698        return;
27699      }
27700
27701      var hideEvent = $__default["default"].Event(EVENT_HIDE);
27702      $__default["default"](this._element).trigger(hideEvent);
27703
27704      if (hideEvent.isDefaultPrevented()) {
27705        return;
27706      }
27707
27708      this._close();
27709    };
27710
27711    _proto.dispose = function dispose() {
27712      this._clearTimeout();
27713
27714      if (this._element.classList.contains(CLASS_NAME_SHOW)) {
27715        this._element.classList.remove(CLASS_NAME_SHOW);
27716      }
27717
27718      $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
27719      $__default["default"].removeData(this._element, DATA_KEY);
27720      this._element = null;
27721      this._config = null;
27722    } // Private
27723    ;
27724
27725    _proto._getConfig = function _getConfig(config) {
27726      config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {});
27727      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
27728      return config;
27729    };
27730
27731    _proto._setListeners = function _setListeners() {
27732      var _this2 = this;
27733
27734      $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
27735        return _this2.hide();
27736      });
27737    };
27738
27739    _proto._close = function _close() {
27740      var _this3 = this;
27741
27742      var complete = function complete() {
27743        _this3._element.classList.add(CLASS_NAME_HIDE);
27744
27745        $__default["default"](_this3._element).trigger(EVENT_HIDDEN);
27746      };
27747
27748      this._element.classList.remove(CLASS_NAME_SHOW);
27749
27750      if (this._config.animation) {
27751        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
27752        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
27753      } else {
27754        complete();
27755      }
27756    };
27757
27758    _proto._clearTimeout = function _clearTimeout() {
27759      clearTimeout(this._timeout);
27760      this._timeout = null;
27761    } // Static
27762    ;
27763
27764    Toast._jQueryInterface = function _jQueryInterface(config) {
27765      return this.each(function () {
27766        var $element = $__default["default"](this);
27767        var data = $element.data(DATA_KEY);
27768
27769        var _config = typeof config === 'object' && config;
27770
27771        if (!data) {
27772          data = new Toast(this, _config);
27773          $element.data(DATA_KEY, data);
27774        }
27775
27776        if (typeof config === 'string') {
27777          if (typeof data[config] === 'undefined') {
27778            throw new TypeError("No method named \"" + config + "\"");
27779          }
27780
27781          data[config](this);
27782        }
27783      });
27784    };
27785
27786    _createClass(Toast, null, [{
27787      key: "VERSION",
27788      get: function get() {
27789        return VERSION;
27790      }
27791    }, {
27792      key: "DefaultType",
27793      get: function get() {
27794        return DefaultType;
27795      }
27796    }, {
27797      key: "Default",
27798      get: function get() {
27799        return Default;
27800      }
27801    }]);
27802
27803    return Toast;
27804  }();
27805  /**
27806   * jQuery
27807   */
27808
27809
27810  $__default["default"].fn[NAME] = Toast._jQueryInterface;
27811  $__default["default"].fn[NAME].Constructor = Toast;
27812
27813  $__default["default"].fn[NAME].noConflict = function () {
27814    $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
27815    return Toast._jQueryInterface;
27816  };
27817
27818  exports.Alert = Alert;
27819  exports.Button = Button;
27820  exports.Carousel = Carousel;
27821  exports.Collapse = Collapse;
27822  exports.Dropdown = Dropdown;
27823  exports.Modal = Modal;
27824  exports.Popover = Popover;
27825  exports.Scrollspy = ScrollSpy;
27826  exports.Tab = Tab;
27827  exports.Toast = Toast;
27828  exports.Tooltip = Tooltip;
27829  exports.Util = Util;
27830
27831  Object.defineProperty(exports, '__esModule', { value: true });
27832
27833}));
vendor: 20,301 bytes, lines 27834-27839
27834/*!
27835	Modaal - accessible modals - v0.4.4
27836	by Humaan, for all humans.
27837	http://humaan.com
27838 */
27839!function(a){function t(a){var t={},o=!1;a.attr("data-modaal-type")&&(o=!0,t.type=a.attr("data-modaal-type")),a.attr("data-modaal-content-source")&&(o=!0,t.content_source=a.attr("data-modaal-content-source")),a.attr("data-modaal-animation")&&(o=!0,t.animation=a.attr("data-modaal-animation")),a.attr("data-modaal-animation-speed")&&(o=!0,t.animation_speed=a.attr("data-modaal-animation-speed")),a.attr("data-modaal-after-callback-delay")&&(o=!0,t.after_callback_delay=a.attr("data-modaal-after-callback-delay")),a.attr("data-modaal-is-locked")&&(o=!0,t.is_locked="true"===a.attr("data-modaal-is-locked")),a.attr("data-modaal-hide-close")&&(o=!0,t.hide_close="true"===a.attr("data-modaal-hide-close")),a.attr("data-modaal-background")&&(o=!0,t.background=a.attr("data-modaal-background")),a.attr("data-modaal-overlay-opacity")&&(o=!0,t.overlay_opacity=a.attr("data-modaal-overlay-opacity")),a.attr("data-modaal-overlay-close")&&(o=!0,t.overlay_close="false"!==a.attr("data-modaal-overlay-close")),a.attr("data-modaal-accessible-title")&&(o=!0,t.accessible_title=a.attr("data-modaal-accessible-title")),a.attr("data-modaal-start-open")&&(o=!0,t.start_open="true"===a.attr("data-modaal-start-open")),a.attr("data-modaal-fullscreen")&&(o=!0,t.fullscreen="true"===a.attr("data-modaal-fullscreen")),a.attr("data-modaal-custom-class")&&(o=!0,t.custom_class=a.attr("data-modaal-custom-class")),a.attr("data-modaal-close-text")&&(o=!0,t.close_text=a.attr("data-modaal-close-text")),a.attr("data-modaal-close-aria-label")&&(o=!0,t.close_aria_label=a.attr("data-modaal-close-aria-label")),a.attr("data-modaal-background-scroll")&&(o=!0,t.background_scroll="true"===a.attr("data-modaal-background-scroll")),a.attr("data-modaal-width")&&(o=!0,t.width=parseInt(a.attr("data-modaal-width"))),a.attr("data-modaal-height")&&(o=!0,t.height=parseInt(a.attr("data-modaal-height"))),a.attr("data-modaal-confirm-button-text")&&(o=!0,t.confirm_button_text=a.attr("data-modaal-confirm-button-text")),a.attr("data-modaal-confirm-cancel-button-text")&&(o=!0,t.confirm_cancel_button_text=a.attr("data-modaal-confirm-cancel-button-text")),a.attr("data-modaal-confirm-title")&&(o=!0,t.confirm_title=a.attr("data-modaal-confirm-title")),a.attr("data-modaal-confirm-content")&&(o=!0,t.confirm_content=a.attr("data-modaal-confirm-content")),a.attr("data-modaal-gallery-active-class")&&(o=!0,t.gallery_active_class=a.attr("data-modaal-gallery-active-class")),a.attr("data-modaal-loading-content")&&(o=!0,t.loading_content=a.attr("data-modaal-loading-content")),a.attr("data-modaal-loading-class")&&(o=!0,t.loading_class=a.attr("data-modaal-loading-class")),a.attr("data-modaal-ajax-error-class")&&(o=!0,t.ajax_error_class=a.attr("data-modaal-ajax-error-class")),a.attr("data-modaal-instagram-id")&&(o=!0,t.instagram_id=a.attr("data-modaal-instagram-id")),o&&a.modaal(t)}var o={init:function(t,o){var e=this;if(e.dom=a("body"),e.$elem=a(o),e.options=a.extend({},a.fn.modaal.options,e.$elem.data(),t),e.xhr=null,e.scope={is_open:!1,id:"modaal_"+(new Date).getTime()+Math.random().toString(16).substring(2),source:e.options.content_source?e.options.content_source:e.$elem.attr("href")},e.$elem.attr("data-modaal-scope",e.scope.id),e.private_options={active_class:"is_active"},e.lastFocus=null,e.options.is_locked||"confirm"==e.options.type||e.options.hide_close?e.scope.close_btn="":e.scope.close_btn='<button type="button" class="modaal-close" id="modaal-close" aria-label="'+e.options.close_aria_label+'"><span>'+e.options.close_text+"</span></button>","none"===e.options.animation&&(e.options.animation_speed=0,e.options.after_callback_delay=0),a(o).on("click.Modaal",function(a){a.preventDefault(),e.create_modaal(e,a)}),!0===e.options.outer_controls)var i="outer";else var i="inner";e.scope.prev_btn='<button type="button" class="modaal-gallery-control modaal-gallery-prev modaal-gallery-prev-'+i+'" id="modaal-gallery-prev" aria-label="Previous image (use left arrow to change)"><span>Previous Image</span></button>',e.scope.next_btn='<button type="button" class="modaal-gallery-control modaal-gallery-next modaal-gallery-next-'+i+'" id="modaal-gallery-next" aria-label="Next image (use right arrow to change)"><span>Next Image</span></button>',!0===e.options.start_open&&e.create_modaal(e)},create_modaal:function(a,t){var o,a=this;if(a.lastFocus=a.$elem,!1!==a.options.should_open&&("function"!=typeof a.options.should_open||!1!==a.options.should_open())){switch(a.options.before_open.call(a,t),a.options.type){case"inline":a.create_basic();break;case"ajax":o=a.options.source(a.$elem,a.scope.source),a.fetch_ajax(o);break;case"confirm":a.options.is_locked=!0,a.create_confirm();break;case"image":a.create_image();break;case"iframe":o=a.options.source(a.$elem,a.scope.source),a.create_iframe(o);break;case"video":a.create_video(a.scope.source);break;case"instagram":a.create_instagram()}a.watch_events()}},watch_events:function(){var t=this;t.dom.off("click.Modaal keyup.Modaal keydown.Modaal"),t.dom.on("keydown.Modaal",function(o){var e=o.keyCode,i=o.target;9==e&&t.scope.is_open&&(a.contains(document.getElementById(t.scope.id),i)||a("#"+t.scope.id).find('*[tabindex="0"]').focus())}),t.dom.on("keyup.Modaal",function(o){var e=o.keyCode,i=o.target;return o.shiftKey&&9==o.keyCode&&t.scope.is_open&&(a.contains(document.getElementById(t.scope.id),i)||a("#"+t.scope.id).find(".modaal-close").focus()),!t.options.is_locked&&27==e&&t.scope.is_open?!a(document.activeElement).is("input:not(:checkbox):not(:radio)")&&void t.modaal_close():"image"==t.options.type?(37==e&&t.scope.is_open&&!a("#"+t.scope.id+" .modaal-gallery-prev").hasClass("is_hidden")&&t.gallery_update("prev"),void(39==e&&t.scope.is_open&&!a("#"+t.scope.id+" .modaal-gallery-next").hasClass("is_hidden")&&t.gallery_update("next"))):void 0}),t.dom.on("click.Modaal",function(o){var e=a(o.target);if(!t.options.is_locked&&(t.options.overlay_close&&e.is(".modaal-inner-wrapper")||e.is(".modaal-close")||e.closest(".modaal-close").length))return void t.modaal_close();if(e.is(".modaal-confirm-btn"))return e.is(".modaal-ok")&&t.options.confirm_callback.call(t,t.lastFocus),e.is(".modaal-cancel")&&t.options.confirm_cancel_callback.call(t,t.lastFocus),void t.modaal_close();if(e.is(".modaal-gallery-control")){if(e.hasClass("is_hidden"))return;return e.is(".modaal-gallery-prev")&&t.gallery_update("prev"),void(e.is(".modaal-gallery-next")&&t.gallery_update("next"))}})},build_modal:function(t){var o=this,e="";"instagram"==o.options.type&&(e=" modaal-instagram");var i,l="video"==o.options.type?"modaal-video-wrap":"modaal-content";switch(o.options.animation){case"fade":i=" modaal-start_fade";break;case"slide-down":i=" modaal-start_slidedown";break;default:i=" modaal-start_none"}var n="";o.options.fullscreen&&(n=" modaal-fullscreen"),""===o.options.custom_class&&void 0===o.options.custom_class||(o.options.custom_class=" "+o.options.custom_class);var s="";o.options.width&&o.options.height&&"number"==typeof o.options.width&&"number"==typeof o.options.height?s=' style="max-width:'+o.options.width+"px;height:"+o.options.height+'px;overflow:auto;"':o.options.width&&"number"==typeof o.options.width?s=' style="max-width:'+o.options.width+'px;"':o.options.height&&"number"==typeof o.options.height&&(s=' style="height:'+o.options.height+'px;overflow:auto;"'),("image"==o.options.type||"video"==o.options.type||"instagram"==o.options.type||o.options.fullscreen)&&(s="");var d="";o.is_touch()&&(d=' style="cursor:pointer;"');var r='<div class="modaal-wrapper modaal-'+o.options.type+i+e+n+o.options.custom_class+'" id="'+o.scope.id+'"><div class="modaal-outer-wrapper"><div class="modaal-inner-wrapper"'+d+">";"video"!=o.options.type&&(r+='<div class="modaal-container"'+s+">"),r+='<div class="'+l+' modaal-focus" aria-hidden="false" aria-label="'+o.options.accessible_title+" - "+o.options.close_aria_label+'" role="dialog">',"inline"==o.options.type?r+='<div class="modaal-content-container" role="document"></div>':r+=t,r+="</div>"+o.scope.close_btn,"video"!=o.options.type&&(r+="</div>"),r+="</div>","image"==o.options.type&&!0===o.options.outer_controls&&(r+=o.scope.prev_btn+o.scope.next_btn),r+="</div></div>",a("#"+o.scope.id+"_overlay").length<1&&o.dom.append(r),"inline"==o.options.type&&t.appendTo("#"+o.scope.id+" .modaal-content-container"),o.modaal_overlay("show")},create_basic:function(){var t=this,o=a(t.scope.source),e="";o.length?(e=o.contents().detach(),o.empty()):e="Content could not be loaded. Please check the source and try again.",t.build_modal(e)},create_instagram:function(){var t=this,o=t.options.instagram_id,e="",i="Instagram photo couldn't be loaded, please check the embed code and try again.";if(t.build_modal('<div class="modaal-content-container'+(""!=t.options.loading_class?" "+t.options.loading_class:"")+'">'+t.options.loading_content+"</div>"),""!=o&&null!==o&&void 0!==o){var l="https://api.instagram.com/oembed?url=http://instagr.am/p/"+o+"/";a.ajax({url:l,dataType:"jsonp",cache:!1,success:function(o){t.dom.append('<div id="temp-ig" style="width:0;height:0;overflow:hidden;">'+o.html+"</div>"),t.dom.attr("data-igloaded")?window.instgrm.Embeds.process():t.dom.attr("data-igloaded","true");var e="#"+t.scope.id+" .modaal-content-container";a(e).length>0&&setTimeout(function(){a("#temp-ig").contents().clone().appendTo(e),a("#temp-ig").remove()},1e3)},error:function(){e=i;var o=a("#"+t.scope.id+" .modaal-content-container");o.length>0&&(o.removeClass(t.options.loading_class).addClass(t.options.ajax_error_class),o.html(e))}})}else e=i;return!1},fetch_ajax:function(t){var o=this;null==o.options.accessible_title&&(o.options.accessible_title="Dialog Window"),null!==o.xhr&&(o.xhr.abort(),o.xhr=null),o.build_modal('<div class="modaal-content-container'+(""!=o.options.loading_class?" "+o.options.loading_class:"")+'">'+o.options.loading_content+"</div>"),o.xhr=a.ajax(t,{success:function(t){var e=a("#"+o.scope.id).find(".modaal-content-container");e.length>0&&(e.removeClass(o.options.loading_class),e.html(t),o.options.ajax_success.call(o,e))},error:function(t){if("abort"!=t.statusText){var e=a("#"+o.scope.id+" .modaal-content-container");e.length>0&&(e.removeClass(o.options.loading_class).addClass(o.options.ajax_error_class),e.html("Content could not be loaded. Please check the source and try again."))}}})},create_confirm:function(){var a,t=this;a='<div class="modaal-content-container"><h1 id="modaal-title">'+t.options.confirm_title+'</h1><div class="modaal-confirm-content">'+t.options.confirm_content+'</div><div class="modaal-confirm-wrap"><button type="button" class="modaal-confirm-btn modaal-ok" aria-label="Confirm">'+t.options.confirm_button_text+'</button><button type="button" class="modaal-confirm-btn modaal-cancel" aria-label="Cancel">'+t.options.confirm_cancel_button_text+"</button></div></div></div>",t.build_modal(a)},create_image:function(){var t,o,e=this,i="";if(e.$elem.is("[data-group]")||e.$elem.is("[rel]")){var l=e.$elem.is("[data-group]"),n=l?e.$elem.attr("data-group"):e.$elem.attr("rel"),s=a(l?'[data-group="'+n+'"]':'[rel="'+n+'"]');s.removeAttr("data-gallery-active","is_active"),e.$elem.attr("data-gallery-active","is_active"),o=s.length-1;var d=[];i='<div class="modaal-gallery-item-wrap">',s.each(function(t,o){var e="",i="",l="",n=!1,s=!1,r=o.getAttribute("data-modaal-desc"),c=o.getAttribute("data-gallery-active");a(o).attr("data-modaal-content-source")?e=a(o).attr("data-modaal-content-source"):a(o).attr("href")?e=a(o).attr("href"):a(o).attr("src")?e=a(o).attr("src"):(e="trigger requires href or data-modaal-content-source attribute",s=!0),""!=r&&null!==r&&void 0!==r?(i=r,l='<div class="modaal-gallery-label"><span class="modaal-accessible-hide">Image '+(t+1)+" - </span>"+r.replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</div>"):l='<div class="modaal-gallery-label"><span class="modaal-accessible-hide">Image '+(t+1)+"</span></div>",c&&(n=!0);var m={url:e,alt:i,rawdesc:r,desc:l,active:n,src_error:s};d.push(m)});for(var r=0;r<d.length;r++){var c="",m=d[r].rawdesc?"Image: "+d[r].rawdesc:"Image "+r+" no description";d[r].active&&(c=" "+e.private_options.active_class);var p=d[r].src_error?d[r].url:'<img src="'+d[r].url+'" alt=" " style="width:100%">';i+='<div class="modaal-gallery-item gallery-item-'+r+c+'" aria-label="'+m+'">'+p+d[r].desc+"</div>"}i+="</div>",1!=e.options.outer_controls&&(i+=e.scope.prev_btn+e.scope.next_btn)}else{var u,_=!1;e.$elem.attr("data-modaal-content-source")?u=e.$elem.attr("data-modaal-content-source"):e.$elem.attr("href")?u=e.$elem.attr("href"):e.$elem.attr("src")?u=e.$elem.attr("src"):(u="trigger requires href or data-modaal-content-source attribute",_=!0);var v="",f="",m="";e.$elem.attr("data-modaal-desc")?(m=e.$elem.attr("data-modaal-desc"),v=e.$elem.attr("data-modaal-desc"),f='<div class="modaal-gallery-label"><span class="modaal-accessible-hide">Image - </span>'+v.replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</div>"):m="Image with no description";var p=_?u:'<img src="'+u+'" alt=" " style="width:100%">';i='<div class="modaal-gallery-item is_active" aria-label="'+m+'">'+p+f+"</div>"}t=i,e.build_modal(t),a(".modaal-gallery-item.is_active").is(".gallery-item-0")&&a(".modaal-gallery-prev").hide(),a(".modaal-gallery-item.is_active").is(".gallery-item-"+o)&&a(".modaal-gallery-next").hide()},gallery_update:function(t){var o=this,e=a("#"+o.scope.id),i=e.find(".modaal-gallery-item"),l=i.length-1;if(0==l)return!1;var n=e.find(".modaal-gallery-prev"),s=e.find(".modaal-gallery-next"),d=0,r=0,c=e.find(".modaal-gallery-item."+o.private_options.active_class),m="next"==t?c.next(".modaal-gallery-item"):c.prev(".modaal-gallery-item");return o.options.before_image_change.call(o,c,m),("prev"!=t||!e.find(".gallery-item-0").hasClass("is_active"))&&(("next"!=t||!e.find(".gallery-item-"+l).hasClass("is_active"))&&void c.stop().animate({opacity:0},250,function(){m.addClass("is_next").css({position:"absolute",display:"block",opacity:0});var t=a(document).width(),i=t>1140?280:50;d=e.find(".modaal-gallery-item.is_next").width(),r=e.find(".modaal-gallery-item.is_next").height();var p=e.find(".modaal-gallery-item.is_next img").prop("naturalWidth"),u=e.find(".modaal-gallery-item.is_next img").prop("naturalHeight");p>t-i?(d=t-i,e.find(".modaal-gallery-item.is_next").css({width:d}),e.find(".modaal-gallery-item.is_next img").css({width:d}),r=e.find(".modaal-gallery-item.is_next").find("img").height()):(d=p,r=u),e.find(".modaal-gallery-item-wrap").stop().animate({width:d,height:r},250,function(){c.removeClass(o.private_options.active_class+" "+o.options.gallery_active_class).removeAttr("style"),c.find("img").removeAttr("style"),m.addClass(o.private_options.active_class+" "+o.options.gallery_active_class).removeClass("is_next").css("position",""),m.stop().animate({opacity:1},250,function(){a(this).removeAttr("style").css({width:"100%"}),a(this).find("img").css("width","100%"),e.find(".modaal-gallery-item-wrap").removeAttr("style"),o.options.after_image_change.call(o,m)}),e.find(".modaal-gallery-item").removeAttr("tabindex"),e.find(".modaal-gallery-item."+o.private_options.active_class).attr("tabindex","0").focus(),e.find(".modaal-gallery-item."+o.private_options.active_class).is(".gallery-item-0")?n.stop().animate({opacity:0},150,function(){a(this).hide()}):n.stop().css({display:"block",opacity:n.css("opacity")}).animate({opacity:1},150),e.find(".modaal-gallery-item."+o.private_options.active_class).is(".gallery-item-"+l)?s.stop().animate({opacity:0},150,function(){a(this).hide()}):s.stop().css({display:"block",opacity:n.css("opacity")}).animate({opacity:1},150)})}))},create_video:function(a){var t,o=this;t='<iframe src="'+a+'" class="modaal-video-frame" frameborder="0" allowfullscreen></iframe>',o.build_modal('<div class="modaal-video-container">'+t+"</div>")},create_iframe:function(a){var t,o=this;t=null!==o.options.width||void 0!==o.options.width||null!==o.options.height||void 0!==o.options.height?'<iframe src="'+a+'" class="modaal-iframe-elem" frameborder="0" allowfullscreen></iframe>':'<div class="modaal-content-container">Please specify a width and height for your iframe</div>',o.build_modal(t)},modaal_open:function(){var t=this,o=a("#"+t.scope.id),e=t.options.animation;"none"===e&&(o.removeClass("modaal-start_none"),t.options.after_open.call(t,o)),"fade"===e&&o.removeClass("modaal-start_fade"),"slide-down"===e&&o.removeClass("modaal-start_slide_down");var i=o;a(".modaal-wrapper *[tabindex=0]").removeAttr("tabindex"),i="image"==t.options.type?a("#"+t.scope.id).find(".modaal-gallery-item."+t.private_options.active_class):o.find(".modaal-iframe-elem").length?o.find(".modaal-iframe-elem"):o.find(".modaal-video-wrap").length?o.find(".modaal-video-wrap"):o.find(".modaal-focus"),i.attr("tabindex","0").focus(),"none"!==e&&setTimeout(function(){t.options.after_open.call(t,o)},t.options.after_callback_delay)},modaal_close:function(){var t=this,o=a("#"+t.scope.id);t.options.before_close.call(t,o),null!==t.xhr&&(t.xhr.abort(),t.xhr=null),"none"===t.options.animation&&o.addClass("modaal-start_none"),"fade"===t.options.animation&&o.addClass("modaal-start_fade"),"slide-down"===t.options.animation&&o.addClass("modaal-start_slide_down"),setTimeout(function(){"inline"==t.options.type&&a("#"+t.scope.id+" .modaal-content-container").contents().detach().appendTo(t.scope.source),o.remove(),t.options.after_close.call(t),t.scope.is_open=!1},t.options.after_callback_delay),t.modaal_overlay("hide"),null!=t.lastFocus&&t.lastFocus.focus()},modaal_overlay:function(t){var o=this;"show"==t?(o.scope.is_open=!0,o.options.background_scroll||o.dom.addClass("modaal-noscroll"),a("#"+o.scope.id+"_overlay").length<1&&o.dom.append('<div class="modaal-overlay" id="'+o.scope.id+'_overlay"></div>'),a("#"+o.scope.id+"_overlay").css("background",o.options.background).stop().animate({opacity:o.options.overlay_opacity},o.options.animation_speed,function(){o.modaal_open()})):"hide"==t&&a("#"+o.scope.id+"_overlay").stop().animate({opacity:0},o.options.animation_speed,function(){a(this).remove(),o.dom.removeClass("modaal-noscroll")})},is_touch:function(){return"ontouchstart"in window||navigator.maxTouchPoints}},e=[];a.fn.modaal=function(t){return this.each(function(i){var l=a(this).data("modaal");if(l){if("string"==typeof t)switch(t){case"open":l.create_modaal(l);break;case"close":l.modaal_close()}}else{var n=Object.create(o);n.init(t,this),a.data(this,"modaal",n),e.push({element:a(this).attr("class"),options:t})}})},a.fn.modaal.options={type:"inline",content_source:null,animation:"fade",animation_speed:300,after_callback_delay:350,is_locked:!1,hide_close:!1,background:"#000",overlay_opacity:"0.8",overlay_close:!0,accessible_title:"Dialog Window",start_open:!1,fullscreen:!1,custom_class:"",background_scroll:!1,should_open:!0,close_text:"Close",close_aria_label:"Close (Press escape to close)",width:null,height:null,before_open:function(){},after_open:function(){},before_close:function(){},after_close:function(){},source:function(a,t){return t},confirm_button_text:"Confirm",confirm_cancel_button_text:"Cancel",confirm_title:"Confirm Title",confirm_content:"<p>This is the default confirm dialog content. Replace me through the options</p>",confirm_callback:function(){},confirm_cancel_callback:function(){},gallery_active_class:"gallery_active_item",outer_controls:!1,before_image_change:function(a,t){},after_image_change:function(a){},loading_content:'<div class="modaal-loading-spinner"><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div><div><div></div></div></div>',loading_class:"is_loading",ajax_error_class:"modaal-error",ajax_success:function(){},instagram_id:null},a(function(){var o=a(".modaal");o.length&&o.each(function(){t(a(this))});var i=new MutationObserver(function(o){o.forEach(function(o){if(o.addedNodes&&o.addedNodes.length>0){[].some.call(o.addedNodes,function(o){var i=a(o);(i.is("a")||i.is("button"))&&(i.hasClass("modaal")?t(i):e.forEach(function(t){if(t.element==i.attr("class"))return a(i).modaal(t.options),!1}))})}})}),l={subtree:!0,attributes:!0,childList:!0,characterData:!0};setTimeout(function(){i.observe(document.body,l)},500)})}(jQuery,window,document);
vendor: 3,477 bytes, lines 27839-27853
27839
27840$(function(){
27841  $('.question').on('click', function() {
27842    if($(this).next('p').css('font-size') == '0px') {
27843      $(this).next('p').css({'font-size':'inherit','height':'auto','opacity':'1'});
27844      $(this).toggleClass('question-open');
27845    }else{
27846      $(this).next('p').css({'font-size':'0px','height':'0','opacity':'0'});
27847      $(this).toggleClass('question-open');
27848    }
27849  });
27850});
27851/*! lazysizes - v5.2.2 */
27852
27853!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,a=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,l=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],i={},G=Array.prototype.forEach,J=function(e,t){if(!i[t]){i[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return i[t].test(e[$]("class")||"")&&i[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var i;if(i=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(i," "))}},V=function(t,i,e){var a=e?P:"removeEventListener";if(e){V(t,i)}r.forEach(function(e){t[a](e,i)})},X=function(e,t,i,a,r){var n=D.createEvent("Event");if(!i){i={}}i.instance=k;n.initEvent(t,!a,!r);n.detail=i;e.dispatchEvent(n);return n},Y=function(e,t){var i;if(!a&&(i=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}i({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,i){i=i||e.offsetWidth;while(i<H.minSize&&t&&!e._lazysizesWidth){i=t.offsetWidth;t=t.parentNode}return i},ee=function(){var i,a;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;i=true;a=false;while(e.length){e.shift()()}i=false};var e=function(e,t){if(i&&!t){e.apply(this,arguments)}else{n.push(e);if(!a){a=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(i,e){return e?function(){ee(i)}:function(){var e=this;var t=arguments;ee(function(){i.apply(e,t)})}},ie=function(e){var i;var a=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){i=false;a=f.now();e()};var s=l&&n>49?function(){l(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(i){return}i=true;t=r-(f.now()-a);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ae=function(e){var t,i;var a=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-i;if(e<a){I(n,a-e)}else{(l||r)(r)}};return function(){i=f.now();if(!t){t=I(n,a)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var N=0;var M=-1;var x=function(e){N--;if(!e||N<0||!e.target){N=0}};var W=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var S=function(e,t){var i;var a=e;var r=W(e);g-=t;b+=t;p-=t;C+=t;
vendor: 4,896 bytes, lines 27853-27857
27853while(r&&(a=a.offsetParent)&&a!=D.body&&a!=O){r=(Z(a,"opacity")||1)>0;if(r&&Z(a,"overflow")!="visible"){i=a.getBoundingClientRect();r=C>i.left&&p<i.right&&b>i.top-1&&g<i.bottom+1}}return r};var t=function(){var e,t,i,a,r,n,s,l,o,u,f,c;var d=k.elements;if((h=H.loadMode)&&N<8&&(e=d.length)){t=0;M++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(l=d[t][$]("data-expand"))||!(n=l*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&N<1&&M>2&&h>2&&!D.hidden){w=f;M=0}else if(h>1&&M>1&&N<6){w=u}else{w=_}}if(o!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;o=n}i=d[t].getBoundingClientRect();if((b=i.bottom)>=s&&(g=i.top)<=z&&(C=i.right)>=s*c&&(p=i.left)<=y&&(b||C||p||g)&&(H.loadHidden||W(d[t]))&&(m&&N<3&&!l&&(h<3||M<4)||S(d[t],n))){R(d[t]);r=true;if(N>9){break}}else if(!r&&m&&!a&&N<4&&M<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!l&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){a=v[0]||d[t]}}if(a&&!r){R(a)}}};var i=ie(t);var B=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}x(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,L);X(t,"lazyloaded")};var a=te(B);var L=function(e){a({target:e.target})};var T=function(t,i){try{t.contentWindow.location.replace(i)}catch(e){t.src=i}};var F=function(e){var t;var i=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(i){e.setAttribute("srcset",i)}};var s=te(function(t,e,i,a,r){var n,s,l,o,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(a){if(i){K(t,H.autosizesClass)}else{t.setAttribute("sizes",a)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){l=t.parentNode;o=l&&j.test(l.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||o);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(x,2500);V(t,L,true)}if(o){G.call(l.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!o){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||o)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,"ls-is-cached")}B(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){N--}},true)});var R=function(e){if(e._lazyRace){return}var t;var i=n.test(e.nodeName);var a=i&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=a=="auto";if((r||!m)&&i&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;N++;s(e,t,r,a,i)};var r=ae(function(){H.loadMode=3;i()});var l=function(){if(H.loadMode==3){H.loadMode=2}r()};var o=function(){if(m){return}if(f.now()-e<999){I(o,999);return}m=true;H.loadMode=3;i();q("scroll",l,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",i,true);q("resize",i,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(i).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",i,true);O[P]("DOMAttrModified",i,true);setInterval(i,999)}q("hashchange",i,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,i,true)});if(/d$|^c/.test(D.readyState)){o()}else{q("load",o);D[P]("DOMContentLoaded",i);I(o,2e4)}if(k.elements.length){t();ee._lsFlush()}else{i()}},checkElems:i,unveil:R,_aLSL:l}}(),re=function(){var i;var n=te(function(e,t,i,a){var r,n,s;e._lazysizesWidth=a;a+="px";e.setAttribute("sizes",a);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",a)}}if(!i.detail.dataAttr){Y(e,i.detail)}});var a=function(e,t,i){var a;var r=e.parentNode;if(r){i=s(e,r,i);a=X(e,"lazybeforesizes",{width:i,dataAttr:!!t});if(!a.defaultPrevented){i=a.detail.width;if(i&&i!==e._lazysizesWidth){n(e,r,a,i)}}}};var e=function(){var e;var t=i.length;if(t){e=0;for(;e<t;e++){a(i[e])}}};var t=ae(e);return{_:function(){i=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:a}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{});
27854// This is a manifest file that'll be compiled into application.js, which will include all the files
27855// listed below.
27856//
27857// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
27858// vendor/assets/javascripts directory can be referenced here using a relative path.
27859//
27860// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
27861// about supported directives.
27862//
27863
27864
27865
27866
27867
27868
27869
27870
27871
27872
27873
27874
27875
27876
27877
27878
27879
27880;

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.