{"version":3,"names":[],"mappings":"","sources":["app.js"],"sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n\"use strict\";\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nvar _foundationSites = _interopRequireDefault(require(\"foundation-sites\"));\n\nvar _typography = _interopRequireDefault(require(\"./framework/base/typography/typography\"));\n\nvar _cEvents = _interopRequireDefault(require(\"./components/c-events/c-events\"));\n\nvar _cBlockGrid = _interopRequireDefault(require(\"./components/c-block-grid/c-block-grid\"));\n\nvar _cContactCard = _interopRequireDefault(require(\"./components/c-contact-card/c-contact-card\"));\n\nvar _cAnchorLinkBox = _interopRequireDefault(require(\"./components/c-anchor-link-box/c-anchor-link-box\"));\n\nvar _cookieConcent = _interopRequireDefault(require(\"./components/c-cookie/cookieConcent\"));\n\nvar _cEditor = _interopRequireDefault(require(\"./components/c-editor/c-editor\"));\n\nvar _cEventInfo = _interopRequireDefault(require(\"./components/c-event-info/c-event-info\"));\n\nvar _cIconList = _interopRequireDefault(require(\"./components/c-icon-list/c-icon-list\"));\n\nvar _cSearchFilter = _interopRequireDefault(require(\"./components/c-search-filter/c-search-filter\"));\n\nvar _cSearchForm = _interopRequireDefault(require(\"./components/c-search-form/c-search-form\"));\n\nvar _cSelectBar = _interopRequireDefault(require(\"./components/c-select-bar/c-select-bar\"));\n\nvar _cHero = _interopRequireDefault(require(\"./components/c-hero/c-hero\"));\n\nvar _cNewsarchive = _interopRequireDefault(require(\"./components/c-newsarchive/c-newsarchive\"));\n\nvar _cCalendararchive = _interopRequireDefault(require(\"./components/c-calendararchive/c-calendararchive\"));\n\nvar _cFeedback = _interopRequireDefault(require(\"./components/c-feedback/c-feedback\"));\n\nvar _cFaq = _interopRequireDefault(require(\"./components/c-faq/c-faq\"));\n\nvar _cInstructions = _interopRequireDefault(require(\"./components/c-instructions/c-instructions\"));\n\nvar _cProgressBar = _interopRequireDefault(require(\"./components/c-progress-bar/c-progress-bar\"));\n\nvar _cPermitFilter = _interopRequireDefault(require(\"./components/c-permit-filter/c-permit-filter\"));\n\nvar _cControlPoints = _interopRequireDefault(require(\"./components/c-control-points/c-control-points\"));\n\nvar _cDynamicForm = _interopRequireDefault(require(\"./components/c-dynamic-form/c-dynamic-form\"));\n\nvar _cInstagramFeed = _interopRequireDefault(require(\"./components/c-instagram-feed/c-instagram-feed\"));\n\nvar _gHeader = _interopRequireDefault(require(\"./globals/g-header/g-header\"));\n\nvar _gNavigationMobile = _interopRequireDefault(require(\"./globals/g-navigation-mobile/g-navigation-mobile\"));\n\nvar _gNavigationSide = _interopRequireDefault(require(\"./globals/g-navigation-side/g-navigation-side\"));\n\nvar _gSearch = _interopRequireDefault(require(\"./globals/g-search/g-search\"));\n\nvar _pJobs = _interopRequireDefault(require(\"./pages/p-jobs/p-jobs\"));\n\nvar _pSearch = _interopRequireDefault(require(\"./pages/p-search/p-search\"));\n\nvar _pEvent = _interopRequireDefault(require(\"./pages/p-event/p-event\"));\n\nvar _dynamicForm = _interopRequireDefault(require(\"./helpers/utils/dynamic-form\"));\n\nvar _storage = _interopRequireDefault(require(\"./helpers/utils/storage\"));\n\nvar _dynamicFormStorage = _interopRequireDefault(require(\"./helpers/utils/dynamic-form-storage\"));\n\nvar _cControlPlan = _interopRequireDefault(require(\"./components/c-control-plan/c-control-plan\"));\n\nvar _cChecklist = _interopRequireDefault(require(\"./components/c-checklist/c-checklist\"));\n\nvar _cIsyCaseMap = _interopRequireDefault(require(\"./components/c-isyCase-map/c-isyCase-map\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// npm packages\n// Foundation - Uncomment to use foundation\n// Components\n'use strict';\n\nmodule.exports = function () {\n  window.jQuery = window.jQuery || _jquery.default;\n  window.$ = window.jQuery; // Foundation - Uncomment to use foundation\n\n  _foundationSites.default.addToJquery(_jquery.default);\n\n  (0, _jquery.default)(document).ready(function () {\n    // Framework\n    // Foundation - Uncomment to use foundation\n    (0, _jquery.default)(document).foundation(); // init\n\n    _storage.default.init();\n\n    _dynamicFormStorage.default.init();\n\n    _typography.default.init();\n\n    _cEvents.default.init();\n\n    _cBlockGrid.default.init();\n\n    _cContactCard.default.init();\n\n    _cAnchorLinkBox.default.init();\n\n    _cookieConcent.default.init();\n\n    _cEditor.default.init();\n\n    _cEventInfo.default.init();\n\n    _cIconList.default.init();\n\n    _cHero.default.init();\n\n    _cSearchForm.default.init();\n\n    _cSearchFilter.default.init();\n\n    _cSelectBar.default.init();\n\n    _cNewsarchive.default.init();\n\n    _cCalendararchive.default.init();\n\n    _cFeedback.default.init();\n\n    _cFaq.default.init();\n\n    _cInstructions.default.init();\n\n    _cPermitFilter.default.init();\n\n    _cProgressBar.default.init();\n\n    _cControlPoints.default.init();\n\n    _cInstagramFeed.default.init();\n\n    _gHeader.default.init();\n\n    _gNavigationMobile.default.init();\n\n    _gNavigationSide.default.init();\n\n    _gSearch.default.init();\n\n    _pJobs.default.init();\n\n    _pSearch.default.init();\n\n    _pEvent.default.init();\n\n    _dynamicForm.default.init();\n\n    _cDynamicForm.default.init();\n\n    _cControlPlan.default.init();\n\n    _cChecklist.default.init();\n\n    _cIsyCaseMap.default.init();\n  });\n}();\n\n},{\"./components/c-anchor-link-box/c-anchor-link-box\":3,\"./components/c-block-grid/c-block-grid\":4,\"./components/c-calendararchive/c-calendararchive\":5,\"./components/c-checklist/c-checklist\":6,\"./components/c-contact-card/c-contact-card\":7,\"./components/c-control-plan/c-control-plan\":8,\"./components/c-control-points/c-control-points\":9,\"./components/c-cookie/cookieConcent\":10,\"./components/c-dynamic-form/c-dynamic-form\":11,\"./components/c-editor/c-editor\":12,\"./components/c-event-info/c-event-info\":13,\"./components/c-events/c-events\":14,\"./components/c-faq/c-faq\":15,\"./components/c-feedback/c-feedback\":16,\"./components/c-hero/c-hero\":17,\"./components/c-icon-list/c-icon-list\":18,\"./components/c-instagram-feed/c-instagram-feed\":19,\"./components/c-instructions/c-instructions\":20,\"./components/c-isyCase-map/c-isyCase-map\":21,\"./components/c-newsarchive/c-newsarchive\":22,\"./components/c-permit-filter/c-permit-filter\":23,\"./components/c-progress-bar/c-progress-bar\":24,\"./components/c-search-filter/c-search-filter\":25,\"./components/c-search-form/c-search-form\":26,\"./components/c-select-bar/c-select-bar\":27,\"./framework/base/typography/typography\":28,\"./globals/g-header/g-header\":29,\"./globals/g-navigation-mobile/g-navigation-mobile\":30,\"./globals/g-navigation-side/g-navigation-side\":31,\"./globals/g-search/g-search\":32,\"./helpers/utils/dynamic-form\":38,\"./helpers/utils/dynamic-form-storage\":37,\"./helpers/utils/storage\":39,\"./pages/p-event/p-event\":40,\"./pages/p-jobs/p-jobs\":41,\"./pages/p-search/p-search\":42,\"foundation-sites\":43,\"jquery\":44}],2:[function(require,module,exports){\n'use strict';\n\nwindow.app = {} || window.app;\nwindow.app.init = require('./app.init');\n\n},{\"./app.init\":1}],3:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar anchorLinkBox = {\n  //mobile\n  elemContent: '.c-anchor-link-box.hide-for-large .c-anchor-link-box__content',\n  init: function init() {\n    var hasHeadings = this.__hasHeadings();\n\n    if (hasHeadings) {\n      //desktop\n      (0, _jquery.default)('.c-anchor-link-box.show-for-large .c-anchor-link-box__link').toggle('c-anchor-link-box__link__active');\n      (0, _jquery.default)('.c-anchor-link-box.show-for-large .c-anchor-link-box__link').attr('aria-expanded', true);\n      (0, _jquery.default)(window).on('scroll', function () {\n        var windowpos = (0, _jquery.default)(window).scrollTop();\n\n        if (windowpos >= (0, _jquery.default)('.c-editor').offset().top) {\n          (0, _jquery.default)('.c-anchor-link-box.show-for-large').addClass('c-anchor-link-box__fixed');\n        } else {\n          (0, _jquery.default)('.c-anchor-link-box.show-for-large').removeClass('c-anchor-link-box__fixed');\n        }\n      }); //mobile\n\n      var $elemContent = (0, _jquery.default)(this.elemContent);\n      var anchorLinkBoxHeight = $elemContent.outerHeight() * ((0, _jquery.default)('.c-editor h2').length + 1);\n      (0, _jquery.default)(window).on('scroll', function () {\n        var windowpos = (0, _jquery.default)(window).scrollTop();\n\n        if (!(0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__content').hasClass('active')) {\n          if (windowpos >= (0, _jquery.default)('.c-editor').offset().top) {\n            (0, _jquery.default)('.c-anchor-link-box.hide-for-large').addClass('c-anchor-link-box__fixed');\n          } else {\n            (0, _jquery.default)('.c-anchor-link-box.hide-for-large').removeClass('c-anchor-link-box__fixed');\n          }\n        } else {\n          if (windowpos + anchorLinkBoxHeight >= (0, _jquery.default)('.c-editor').offset().top) {\n            (0, _jquery.default)('.c-anchor-link-box.hide-for-large').addClass('c-anchor-link-box__fixed');\n          } else {\n            (0, _jquery.default)('.c-anchor-link-box.hide-for-large').removeClass('c-anchor-link-box__fixed');\n          }\n        }\n      });\n      $elemContent.on('click', function () {\n        (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__link').toggleClass('c-anchor-link-box__link__active').animate({\n          height: 'toggle'\n        }, 500);\n\n        if ((0, _jquery.default)('.c-anchor-link-box.hide-for-large').hasClass('c-anchor-link-box__fixed') & !(0, _jquery.default)(this).hasClass('active')) {\n          (0, _jquery.default)('html, body').animate({\n            scrollTop: (0, _jquery.default)('.c-anchor-link-box.hide-for-large').offset().top - anchorLinkBoxHeight\n          }, 800);\n        } else if ((0, _jquery.default)('.c-anchor-link-box.hide-for-large').hasClass('c-anchor-link-box__fixed')) {\n          (0, _jquery.default)('html, body').animate({\n            scrollTop: (0, _jquery.default)('.c-anchor-link-box.hide-for-large').offset().top + anchorLinkBoxHeight\n          }, 800);\n        }\n\n        (0, _jquery.default)(this).toggleClass('active');\n        (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__link').attr('aria-expanded', function (i, attr) {\n          return attr == 'true' ? 'false' : 'true';\n        });\n      });\n\n      this.__createAnchorLinks();\n    }\n  },\n  __createAnchorLinks: function __createAnchorLinks() {\n    var headings = (0, _jquery.default)('.c-editor h2');\n    headings.each(function (index) {\n      var heading = (0, _jquery.default)(this);\n      var headingText = heading.text();\n      heading.attr('id', 'heading-' + headingText);\n      var headingId = heading.attr('id');\n      var anchorLink = (0, _jquery.default)('<a class=\"c-anchor-link-box__link-item\" href=\"#' + headingId + '\" data-index=\"' + index + '\">' + headingText + '</a>');\n      var anchorLinkDesktop = (0, _jquery.default)('<a class=\"c-anchor-link-box__link-item\" href=\"#' + headingId + '\" data-index=\"' + index + '\">' + headingText + '</a>');\n      (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__link').append(anchorLink);\n      (0, _jquery.default)('.c-anchor-link-box.show-for-large .c-anchor-link-box__link').append(anchorLinkDesktop); //desktop\n\n      (0, _jquery.default)(window).on('scroll', function () {\n        var pos = heading.offset().top;\n        var windowpos = (0, _jquery.default)(window).scrollTop();\n\n        if (windowpos + heading.height() >= pos & windowpos + heading.height() <= (headings[index + 1] != null ? (0, _jquery.default)(headings[index + 1]).offset().top : (0, _jquery.default)(document).height())) {\n          anchorLinkDesktop.addClass('active');\n          heading.addClass('active');\n        } else {\n          anchorLinkDesktop.removeClass('active');\n          heading.removeClass('active');\n        }\n      });\n      anchorLinkDesktop.on('click', function (e) {\n        e.preventDefault();\n        (0, _jquery.default)('html, body').animate({\n          scrollTop: heading.offset().top\n        }, 800);\n      }); //mobile\n\n      (0, _jquery.default)(window).on('scroll', function () {\n        var pos = heading.offset().top;\n        var windowpos = (0, _jquery.default)(window).scrollTop();\n        var anchorLinkBoxHeight = (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__content').outerHeight() * ((0, _jquery.default)('.c-editor h2').length + 2) + 4 * ((0, _jquery.default)('.c-editor h2').length - 1);\n\n        if (!(0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__content').hasClass('active')) {\n          if (windowpos + heading.height() + (0, _jquery.default)('.c-anchor-link-box.hide-for-large').outerHeight() >= pos & windowpos + heading.height() + (0, _jquery.default)('.c-anchor-link-box.hide-for-large').outerHeight() <= (headings[index + 1] != null ? (0, _jquery.default)(headings[index + 1]).offset().top : (0, _jquery.default)(document).height())) {\n            anchorLink.addClass('active');\n            heading.addClass('active');\n          } else {\n            anchorLink.removeClass('active');\n            heading.removeClass('active');\n          }\n        } else {\n          if (windowpos + anchorLinkBoxHeight >= pos & windowpos + anchorLinkBoxHeight <= (headings[index + 1] != null ? (0, _jquery.default)(headings[index + 1]).offset().top : (0, _jquery.default)(document).height())) {\n            anchorLink.addClass('active');\n            heading.addClass('active');\n          } else {\n            anchorLink.removeClass('active');\n            heading.removeClass('active');\n          }\n        }\n      });\n      anchorLink.on('click', function (e) {\n        e.preventDefault();\n        var scrollMargin = 10;\n        var boxHeight = (0, _jquery.default)('.c-anchor-link-box.hide-for-large').hasClass('c-anchor-link-box__fixed') ? (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__content').height() * 2 + scrollMargin : (0, _jquery.default)('.c-anchor-link-box.hide-for-large').height() + (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__content').height() * 2 + scrollMargin;\n        (0, _jquery.default)('html, body').animate({\n          scrollTop: heading.offset().top - boxHeight\n        }, 800);\n        (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__content').removeClass('active');\n        (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__link').attr('aria-expanded', function (i, attr) {\n          return attr == 'true' ? 'false' : 'true';\n        });\n        (0, _jquery.default)('.c-anchor-link-box.hide-for-large .c-anchor-link-box__link').toggleClass('c-anchor-link-box__link__active').animate({\n          height: 'toggle'\n        }, 500);\n      });\n    });\n  },\n  __hasHeadings: function __hasHeadings() {\n    if ((0, _jquery.default)('.c-editor h2').length === 0) {\n      (0, _jquery.default)('.c-anchor-link-box').hide();\n      (0, _jquery.default)('.p-standard__container').addClass('p-standard__container--no-h2');\n      return false;\n    }\n\n    return true;\n  }\n};\nvar _default = anchorLinkBox;\nexports.default = _default;\n\n},{\"jquery\":44}],4:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentBlockGrid = {\n  init: function init() {\n    var $elemBlock = (0, _jquery.default)('.c-article, .c-news, .c-calendar');\n\n    if ($elemBlock.parents('.p-landing').length) {\n      $elemBlock = (0, _jquery.default)('.c-article, .c-calendar');\n    }\n\n    (0, _jquery.default)($elemBlock).each(function () {\n      if ((0, _jquery.default)(this).parent().next().length == 0) {\n        (0, _jquery.default)(this).parent().removeClass('c-block-grid--margin');\n      } else if ((0, _jquery.default)(this).parent().next().find($elemBlock).length == 0) {\n        (0, _jquery.default)(this).parent().addClass('c-block-grid--margin');\n      }\n\n      if ((0, _jquery.default)(this).parent().is(':last-child')) {\n        (0, _jquery.default)(this).parent().addClass('c-block-grid--selector');\n      }\n\n      if ((0, _jquery.default)(this).parent().is(':first-child')) {\n        (0, _jquery.default)(this).parent().addClass('c-block-grid--selector');\n      }\n    });\n  }\n};\nvar _default = componentBlockGrid;\nexports.default = _default;\n\n},{\"jquery\":44}],5:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentCalendArchive = {\n  archiveContainer: '#archiveContainer',\n  elemEventPanel: '.c-events__section--panel',\n  elemEventGroup: '.c-events__group',\n  elemEventButton: '.c-events__button',\n  elemList: '.c-events__group',\n  elemSelectList: '.c-select-bar__list',\n  elemButtonExpanded: 'c-events__button--expanded',\n  elemEventListID: '#eventList',\n  elemSelectListInput: '.c-select-bar__input',\n  elemSelectListButton: 'button.c-select-bar__button span',\n  SessionStorageURLParameters: 'CalendarURL',\n  init: function init() {\n    var initMonthsExpanded = false;\n    var filterParameter = componentCalendArchive.getUrlParameter('filters');\n\n    if (typeof filterParameter !== 'undefined' && filterParameter != '') {\n      var filterValue = filterParameter.split(';');\n      var filterListItems = (0, _jquery.default)(componentCalendArchive.elemSelectList).find(componentCalendArchive.elemSelectListInput);\n\n      for (var i = 0; i < filterValue.length; i++) {\n        if (filterValue != '') {\n          filterListItems[filterValue[i]].checked = true;\n        }\n      }\n\n      componentCalendArchive.ChangeSelectFilterText();\n      var monthsParameterCheck = componentCalendArchive.getUrlParameter('months');\n\n      if (typeof monthsParameterCheck !== 'undefined' && monthsParameterCheck != '') {\n        initMonthsExpanded = true;\n        componentCalendArchive.GetFilteredEvents(true);\n      } else {\n        componentCalendArchive.GetFilteredEvents(false);\n      }\n    }\n\n    if (initMonthsExpanded == false) {\n      componentCalendArchive.ExpandMonths();\n    }\n\n    if (document.getElementById('eventList') === null) {\n      return;\n    }\n\n    (0, _jquery.default)('.c-select-bar__reset').on('click', function () {\n      (0, _jquery.default)('input[type=\\'checkbox\\']:checked').prop('checked', false);\n      (0, _jquery.default)(componentCalendArchive.elemSelectListButton).text('Inga utvalda ämnen');\n      componentCalendArchive.GetFilteredEvents(false);\n    });\n    (0, _jquery.default)(componentCalendArchive.elemSelectListInput).on('change', function () {\n      componentCalendArchive.ChangeSelectFilterText();\n      componentCalendArchive.GetFilteredEvents(false);\n    });\n    (0, _jquery.default)(componentCalendArchive.archiveContainer).on('click', (0, _jquery.default)(componentCalendArchive.elemEventPanel), function () {\n      componentCalendArchive.UpdateURLParameter();\n    });\n  },\n  ChangeSelectFilterText: function ChangeSelectFilterText() {\n    var numberOfCheckedSubjects = (0, _jquery.default)('input:checkbox:checked').length;\n\n    if (numberOfCheckedSubjects == 0) {\n      (0, _jquery.default)(componentCalendArchive.elemSelectListButton).text('Inga utvalda ämnen');\n    } else {\n      (0, _jquery.default)(componentCalendArchive.elemSelectListButton).text(numberOfCheckedSubjects + ' valda ämnen');\n    }\n  },\n  GetFilteredEvents: function GetFilteredEvents(shouldMonthsBeExpanded) {\n    var selectedAreas = [];\n    (0, _jquery.default)(componentCalendArchive.elemSelectList + ' input:checked').each(function () {\n      selectedAreas.push(this.value);\n    });\n    var ajaxUrl = window.eventsListConfig.url;\n    var filterParam = {\n      'areas': selectedAreas\n    };\n\n    _jquery.default.ajax({\n      type: 'POST',\n      url: ajaxUrl,\n      contentType: 'application/json; charset=utf-8',\n      dataType: 'html',\n      data: JSON.stringify(filterParam),\n      success: function success(response) {\n        (0, _jquery.default)(componentCalendArchive.elemEventListID).html(response);\n\n        if (shouldMonthsBeExpanded) {\n          componentCalendArchive.ExpandMonths();\n        }\n\n        componentCalendArchive.UpdateURLParameter();\n      }\n    });\n  },\n  getUrlParameter: function getUrlParameter(sParam) {\n    var sPageURL = window.location.search.substring(1),\n        sURLVariables = sPageURL.split('&'),\n        sParameterName,\n        i;\n\n    for (i = 0; i < sURLVariables.length; i++) {\n      sParameterName = sURLVariables[i].split('=');\n\n      if (sParameterName[0] === sParam) {\n        return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n      }\n    }\n  },\n  UpdateURLParameter: function UpdateURLParameter() {\n    var selectedFilters,\n        selectedMonths,\n        parameters = '';\n    selectedFilters = componentCalendArchive.GetFilters();\n    selectedMonths = componentCalendArchive.GetMonths();\n    parameters = componentCalendArchive.CreateURLParameters(selectedFilters, selectedMonths);\n    window.history.pushState({}, '', window.location.pathname + parameters);\n    sessionStorage.setItem(componentCalendArchive.SessionStorageURLParameters, window.location.pathname + parameters);\n  },\n  CreateURLParameters: function CreateURLParameters(selectedFilters, selectedMonths) {\n    var parameters = '';\n\n    if (typeof selectedFilters !== 'undefined' && selectedFilters != '') {\n      parameters += (parameters.indexOf('?') >= 0 ? '&' : '?') + 'filters=' + selectedFilters;\n    }\n\n    if (typeof selectedMonths !== 'undefined' && selectedMonths != '') {\n      parameters += (parameters.indexOf('?') >= 0 ? '&' : '?') + 'months=' + selectedMonths;\n    }\n\n    return parameters;\n  },\n  GetFilters: function GetFilters() {\n    var selectedFilters,\n        filterListItems = (0, _jquery.default)(componentCalendArchive.elemSelectList).find('li > label > input');\n\n    for (var i = 0; i < filterListItems.length; i++) {\n      if (filterListItems[i].checked == true) {\n        selectedFilters += i + ';';\n      }\n    }\n\n    if (typeof selectedFilters !== 'undefined' && selectedFilters != '') {\n      if (selectedFilters.indexOf(';') != -1) {\n        selectedFilters = selectedFilters.substring(0, selectedFilters.length - 1);\n      }\n\n      if (selectedFilters.indexOf('undefined') != -1) {\n        selectedFilters = selectedFilters.split('undefined')[1];\n      }\n    }\n\n    return selectedFilters;\n  },\n  GetMonths: function GetMonths() {\n    var selectedMonths;\n    (0, _jquery.default)(componentCalendArchive.elemEventPanel).each(function () {\n      if ((0, _jquery.default)(this).find((0, _jquery.default)(componentCalendArchive.elemEventButton)).hasClass(componentCalendArchive.elemButtonExpanded)) {\n        var monthText = (0, _jquery.default)(this).find('time')[0].innerText;\n        selectedMonths += monthText + ';';\n      }\n    });\n\n    if (typeof selectedMonths !== 'undefined' && selectedMonths != '') {\n      if (selectedMonths.indexOf(';') != -1) {\n        selectedMonths = selectedMonths.substring(0, selectedMonths.length - 1);\n      }\n\n      if (selectedMonths.indexOf('undefined') != -1) {\n        selectedMonths = selectedMonths.split('undefined')[1];\n      }\n    }\n\n    return selectedMonths;\n  },\n  ExpandMonths: function ExpandMonths() {\n    var monthsParameter = componentCalendArchive.getUrlParameter('months');\n\n    if (typeof monthsParameter !== 'undefined' && monthsParameter != '') {\n      var monthsValue = monthsParameter.split(';');\n      (0, _jquery.default)(componentCalendArchive.elemEventPanel).each(function () {\n        var monthText = (0, _jquery.default)(this).find('time')[0].innerText;\n\n        if (_jquery.default.inArray(monthText, monthsValue) != -1) {\n          (0, _jquery.default)(this).siblings((0, _jquery.default)(this.elemEventGroup)).show();\n          (0, _jquery.default)(this).find((0, _jquery.default)(componentCalendArchive.elemEventButton)).toggleClass(componentCalendArchive.elemButtonExpanded);\n          (0, _jquery.default)(this).next((0, _jquery.default)(this.elemList)).attr('aria-hidden', false);\n          (0, _jquery.default)(this).attr('aria-expanded', true);\n        }\n      });\n    }\n  }\n};\nvar _default = componentCalendArchive;\nexports.default = _default;\n\n},{\"jquery\":44}],6:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar checkList = {\n  elemAccordionLink: '.c-checklist__link',\n  elemAccordionArea: '.c-checklist__area',\n  elemAccordion: '.c-checklist',\n  elemListItem: '.c-checklist__item',\n  elemAccordionButton: '.c-checklist__button',\n  init: function init() {\n    this._accordion();\n\n    var self = this;\n    (0, _jquery.default)('[data-checklist]').each(function (_, element) {\n      var checkBoxes = (0, _jquery.default)(element).find('input[data-checklist-item]');\n      var countLabel = (0, _jquery.default)('[data-checklist-count]');\n      var totalLabel = (0, _jquery.default)('[data-checklist-total]');\n      var progress = (0, _jquery.default)('[data-checklist-progress]');\n      countLabel.html(self._getCheckedCount(checkBoxes));\n      totalLabel.html(self._getCount(checkBoxes));\n      progress.css('width', self._getPercent(checkBoxes) + '%');\n      checkBoxes.change(function () {\n        countLabel.html(self._getCheckedCount(checkBoxes));\n        progress.css('width', self._getPercent(checkBoxes) + '%');\n      });\n    });\n  },\n  _getCheckedCount: function _getCheckedCount(checkBoxes) {\n    var checkedCount = 0;\n    checkBoxes.each(function (_, item) {\n      if ((0, _jquery.default)(item).is(':checked')) {\n        checkedCount++;\n      }\n    });\n    return checkedCount;\n  },\n  _getCount: function _getCount(checkBoxes) {\n    return checkBoxes.length;\n  },\n  _getPercent: function _getPercent(checkBoxes) {\n    var percent = 0;\n\n    var count = this._getCount(checkBoxes);\n\n    var checkedCount = this._getCheckedCount(checkBoxes);\n\n    percent = checkedCount / count * 100;\n    return percent;\n  },\n  _accordion: function _accordion() {\n    var $elemAccordionLink = (0, _jquery.default)(this.elemAccordionLink);\n    var $elemListExpanded = 'c-checklist__item--expanded';\n    var $elemAccordionArea = (0, _jquery.default)(this.elemAccordionArea);\n    var self = this;\n    $elemAccordionLink.on('click', function (e) {\n      e.preventDefault();\n      /* Expand Instruction */\n\n      (0, _jquery.default)(this).closest(self.elemListItem).toggleClass($elemListExpanded);\n      (0, _jquery.default)(this).parent().parent().siblings().slideToggle();\n      /* WAI-ARIA */\n\n      if ((0, _jquery.default)(this).parent().parent().siblings($elemAccordionArea).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).parent().parent().siblings($elemAccordionArea).attr('aria-hidden', false);\n        return (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).parent().parent().siblings($elemAccordionArea).attr('aria-hidden', true);\n        return (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n  }\n};\nvar _default = checkList;\nexports.default = _default;\n\n},{\"jquery\":44}],7:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentContactCard = {\n  elem: '.c-contact-card',\n  elemTab: '.c-contact-card__tab',\n  elemContent: '.c-contact-card__content',\n  elemRight: '.c-contact-card__right',\n  elemLeft: '.c-contact-card__left',\n  init: function init() {\n    var $elem = (0, _jquery.default)(this.elem);\n    var $elemTab = (0, _jquery.default)(this.elemTab);\n    var $elemLeft = (0, _jquery.default)(this.elemLeft);\n    var $elemRight = (0, _jquery.default)(this.elemRight);\n    var $elemTabCurrent = 'c-contact-card__tab--current';\n    var $elemContentCurrent = 'c-contact-card__content--current';\n    var $elemTabsShadow = 'c-contact-card__tabs--shadow';\n    var $elemTabsRight = 'c-contact-card__right--tabs';\n    var $elemTabs = 'c-contact-card__tabs';\n    $elem.each(function () {\n      (0, _jquery.default)(this).find($elemTab).click(function () {\n        /* WAI-ARIA */\n        (0, _jquery.default)(this).children().attr('aria-selected', false);\n        (0, _jquery.default)(this).siblings().removeClass($elemTabCurrent);\n        (0, _jquery.default)(this).addClass($elemTabCurrent);\n        (0, _jquery.default)(this).children().attr('aria-selected', true);\n        (0, _jquery.default)(this).parent().siblings().each(function () {\n          if ((0, _jquery.default)(this).attr('id') == (0, _jquery.default)(this).parent().parent().find('.c-contact-card__tab--current').attr('data-tabs-target')) {\n            (0, _jquery.default)(this).addClass($elemContentCurrent).attr('aria-hidden', false);\n          } else {\n            (0, _jquery.default)(this).removeClass($elemContentCurrent).attr('aria-hidden', true);\n          }\n        });\n        /* Tabs Shadow on Map */\n\n        if ((0, _jquery.default)(this).parent().siblings('.c-contact-card__content--map').css('opacity') == '1') {\n          (0, _jquery.default)(this).parent().addClass($elemTabsShadow);\n        } else {\n          $elemTab.parent().removeClass($elemTabsShadow);\n        }\n      });\n    });\n    /* Equal Height */\n\n    $elemRight.each(function () {\n      if ((0, _jquery.default)(this).children('ul').hasClass($elemTabs)) {\n        (0, _jquery.default)(this).addClass($elemTabsRight);\n        var maxHeight = 0;\n        (0, _jquery.default)(this).parent().find('.c-contact-card__left, .c-contact-card__content').each(function () {\n          if ((0, _jquery.default)(this).outerHeight(true) > maxHeight) {\n            maxHeight = (0, _jquery.default)(this).outerHeight(true);\n          }\n        });\n        (0, _jquery.default)(this).parent().find('.c-contact-card__right, .c-contact-card__content').outerHeight(maxHeight);\n        (0, _jquery.default)(window).resize(function () {\n          var windowWidth = (0, _jquery.default)(window).width();\n\n          if (windowWidth > 1023) {\n            (0, _jquery.default)(this).parent().find($elemLeft).outerHeight(maxHeight);\n          }\n        });\n      }\n    });\n  }\n};\nvar _default = componentContactCard;\nexports.default = _default;\n\n},{\"jquery\":44}],8:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _review = _interopRequireDefault(require(\"../../helpers/buildpermit/review\"));\n\nvar _controlpoints = _interopRequireDefault(require(\"../../helpers/buildpermit/controlpoints\"));\n\nvar _entrepreneurs = _interopRequireDefault(require(\"../../helpers/buildpermit/entrepreneurs\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar controlPlan = {\n  init: function init() {\n    _entrepreneurs.default.init();\n\n    _controlpoints.default.init();\n\n    _review.default.init();\n  }\n};\nvar _default = controlPlan;\nexports.default = _default;\n\n},{\"../../helpers/buildpermit/controlpoints\":33,\"../../helpers/buildpermit/entrepreneurs\":34,\"../../helpers/buildpermit/review\":35}],9:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentControlPoints = {\n  elemAccordionLink: '.c-control-points__link',\n  elemAccordionArea: '.c-control-points__area',\n  elemAccordion: '.c-control-points',\n  elemListItem: '.c-control-points__item',\n  expandedClass: 'c-control-points__item--expanded',\n  init: function init() {\n    this._accordion();\n  },\n  _accordion: function _accordion() {\n    var elemListExpanded = this.expandedClass;\n    var $elemAccordionArea = (0, _jquery.default)(this.elemAccordionArea);\n    var self = this;\n    (0, _jquery.default)('body').on('click', function (e) {\n      var elemAccordion = (0, _jquery.default)(e.target).closest(self.elemAccordionLink);\n\n      if (!elemAccordion.length) {\n        return;\n      }\n\n      e.preventDefault();\n      /* Expand Instruction */\n\n      (0, _jquery.default)(elemAccordion).closest(self.elemListItem).toggleClass(elemListExpanded);\n      (0, _jquery.default)(elemAccordion).parent().parent().siblings().slideToggle();\n      /* WAI-ARIA */\n\n      if ((0, _jquery.default)(elemAccordion).parent().parent().siblings($elemAccordionArea).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(elemAccordion).parent().parent().siblings($elemAccordionArea).attr('aria-hidden', false);\n        return (0, _jquery.default)(elemAccordion).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(elemAccordion).parent().parent().siblings($elemAccordionArea).attr('aria-hidden', true);\n        return (0, _jquery.default)(elemAccordion).attr('aria-expanded', false);\n      }\n    });\n  }\n};\nvar _default = componentControlPoints;\nexports.default = _default;\n\n},{\"jquery\":44}],10:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nvar cookieConcent = {\n  init: function init() {\n    bindCookieConsent();\n    var consentcookie = getCookie('ConsentCookie');\n    var cookieModal = document.querySelector('.cookieModal');\n    var dontShowCookiePrompt = document.querySelector('.dontShowCookiePrompt');\n    console.log(dontShowCookiePrompt);\n\n    if (consentcookie && cookieModal) {\n      // cookieModal.classList.remove('show');\n      cookieModal.style.display = 'none';\n      setCookieSettings(consentcookie);\n    } else if (dontShowCookiePrompt) {\n      cookieModal.style.display = 'none';\n    } else if (cookieModal) {\n      // cookieModal.classList.add('show');\n      cookieModal.style.display = 'flex'; // Set focus in the modal\n\n      cookieModal.focus();\n    }\n\n    function getCookie(name) {\n      var cookieName = name + '=';\n      var cookies = document.cookie.split(';');\n\n      for (var i = 0; i < cookies.length; i++) {\n        var c = cookies[i];\n\n        while (c.charAt(0) === ' ') {\n          c = c.substring(1);\n        }\n\n        if (c.indexOf(cookieName) === 0) {\n          return c.substring(cookieName.length, c.length);\n        }\n      }\n\n      return '';\n    } // function EraseCookie (name) {\n    //     document.cookie = `${name}=; Max-Age=-99999999;`;\n    // }\n\n\n    function setCookie(name, value, expirationDays) {\n      var d = new Date();\n      d.setTime(d.getTime() + expirationDays * 24 * 60 * 60 * 1000);\n      var expires = 'expires=' + d.toUTCString();\n      document.cookie = name + '=' + value + ';' + expires + ';path=/';\n    }\n\n    function setCookieSettings(cookie) {\n      // console.log('settings - ',cookie);\n      var cookiearray = _toConsumableArray(cookie);\n\n      if (cookiearray[1] == '1') {\n        //statistic cookies accepted\n        if (typeof $vizzit !== 'undefined') {\n          $vizzit.cookie.set();\n        }\n      }\n\n      for (var i = 0; i < cookiearray.length; i++) {\n        var value = cookiearray[i];\n\n        if (i != 0 && value === '1') {\n          document.querySelector(\"#cookie-option-\".concat(i + 1)).checked = true;\n        } else if (i != 0 && value === '0') {\n          document.querySelector(\"#cookie-option-\".concat(i + 1)).checked = false;\n        }\n      }\n    }\n\n    function isHidden(el) {\n      var style = window.getComputedStyle(el);\n      return style.display === 'none';\n    }\n\n    function bindCookieConsent() {\n      var cookieModal = document.querySelector('.cookieModal');\n      var acceptAll = document.querySelector('.acceptAll');\n\n      if (acceptAll) {\n        acceptAll.addEventListener('click', function () {\n          setCookie('ConsentCookie', '111', 365);\n          cookieModal.classList.remove('show');\n          setCookieSettings('111');\n          location.reload();\n        }, false);\n      }\n\n      var acceptAllPolicy = document.querySelector('.acceptAllPolicy');\n\n      if (acceptAllPolicy) {\n        acceptAllPolicy.addEventListener('click', function () {\n          setCookie('ConsentCookie', '111', 365);\n          cookieModal.classList.remove('show');\n          setCookieSettings('111');\n          location.reload();\n        }, false);\n      }\n\n      var declineAll = document.querySelector('.declineAll');\n\n      if (declineAll) {\n        declineAll.addEventListener('click', function () {\n          setCookie('ConsentCookie', '100', 365);\n          cookieModal.style.display = 'none';\n          setCookieSettings('100');\n        }, false);\n      }\n\n      var saveSettings = document.querySelector('.saveSettings');\n\n      if (saveSettings) {\n        saveSettings.addEventListener('click', function (e) {\n          e.preventDefault();\n          var $inputs = document.querySelectorAll('.content.settings input[type=checkbox]');\n          var cookiestring = '';\n\n          for (var i = 0; i < $inputs.length; i++) {\n            var input = $inputs[i];\n            var value = '';\n\n            if (input.checked) {\n              value = '1';\n            } else if (input.checked === false) {\n              value = '0';\n            }\n\n            if (i == 0) {\n              cookiestring += '1';\n            } else if (i == 1) {\n              cookiestring += \"\".concat(value);\n            } else if (i == 2) {\n              cookiestring += \"\".concat(value);\n            }\n          }\n\n          setCookie('ConsentCookie', cookiestring, 365);\n          setCookieSettings(cookiestring);\n          cookieModal.classList.remove('show'); // reload page to show videos of forms\n\n          location.reload();\n        }, false);\n      } // add all the elements inside modal which you want to make focusable\n\n\n      var focusableElements = 'button, [href], input:not([disabled]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n      var consentmodal = document.querySelector('.content.consent');\n      var consentfirstFocusableElement = '';\n      var consentlastFocusableElement = '';\n\n      if (consentmodal) {\n        consentfirstFocusableElement = consentmodal.querySelectorAll(focusableElements)[0];\n        var consentfocusableContent = consentmodal.querySelectorAll(focusableElements);\n        consentlastFocusableElement = consentfocusableContent[consentfocusableContent.length - 1];\n      }\n\n      var settingsmodal = document.querySelector('.content.settings');\n      var settingsfirstFocusableElement = '';\n      var settingslastFocusableElement = '';\n\n      if (settingsmodal) {\n        settingsfirstFocusableElement = settingsmodal.querySelectorAll(focusableElements)[0];\n        var settingsfocusableContent = settingsmodal.querySelectorAll(focusableElements);\n        settingslastFocusableElement = settingsfocusableContent[settingsfocusableContent.length - 1];\n      }\n\n      var policymodal = document.querySelector('.content.policy');\n      var policyfirstFocusableElement = '';\n      var policylastFocusableElement = '';\n\n      if (policymodal) {\n        policyfirstFocusableElement = policymodal.querySelectorAll(focusableElements)[0];\n        var policyfocusableContent = policymodal.querySelectorAll(focusableElements);\n        policylastFocusableElement = policyfocusableContent[policyfocusableContent.length - 1];\n      }\n\n      var cookieSettings = document.querySelector('.cookieSettings');\n\n      if (cookieSettings) {\n        cookieSettings.addEventListener('click', function () {\n          consentmodal.classList.remove('show');\n          settingsmodal.classList.add('show');\n          policymodal.classList.remove('show');\n\n          if (isHidden(cookieModal)) {\n            cookieModal.classList.add('show');\n          }\n\n          cookieModal.focus();\n        }, false);\n      }\n\n      var changeCookieSettings = document.querySelector('.changeCookieSettings');\n\n      if (changeCookieSettings) {\n        changeCookieSettings.addEventListener('click', function () {\n          consentmodal.classList.remove('show');\n          settingsmodal.classList.add('show');\n          policymodal.classList.remove('show');\n\n          if (isHidden(cookieModal)) {\n            cookieModal.style.display = 'flex'; // cookieModal.classList.add('show');\n          }\n\n          cookieModal.focus();\n        }, false);\n      }\n\n      var backbtn = document.querySelectorAll('.cookieModal .backbtn');\n\n      if (backbtn) {\n        backbtn.forEach(function (item) {\n          item.addEventListener('click', function (e) {\n            e.preventDefault();\n            consentmodal.classList.add('show');\n            settingsmodal.classList.remove('show');\n            policymodal.classList.remove('show');\n            acceptAll.focus();\n          }, false);\n        });\n      }\n\n      var closebtn = document.querySelector('.cookieModal .closebtn');\n\n      if (closebtn) {\n        closebtn.addEventListener('click', function () {\n          cookieModal.classList.remove('show');\n          consentmodal.classList.remove('show');\n          settingsmodal.classList.remove('show');\n          policymodal.classList.remove('show');\n        }, false);\n      }\n\n      var cookieinfo = document.querySelectorAll('.cookieModal .cookieinfo');\n\n      if (cookieinfo) {\n        cookieinfo.forEach(function (item) {\n          item.addEventListener('click', function (e) {\n            e.preventDefault();\n            var $this = e.currentTarget;\n            var content = $this.parentElement.querySelector('.cookieinfo_content');\n\n            if ($this.getAttribute('aria-expanded') == 'false') {\n              $this.setAttribute('aria-expanded', 'true');\n              content.classList.add('show');\n              $this.classList.add('minify');\n            } else {\n              $this.setAttribute('aria-expanded', 'false');\n              content.classList.remove('show');\n              $this.classList.remove('minify');\n            }\n          }, false);\n        });\n      }\n\n      function handleKeyDown(e) {\n        var isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n\n        if (!isTabPressed) {\n          return;\n        }\n\n        if (consentmodal && !isHidden(consentmodal)) {\n          if (e.shiftKey) {\n            // if shift key pressed for shift + tab combination\n            if (document.activeElement === consentfirstFocusableElement) {\n              consentlastFocusableElement.focus();\n              e.preventDefault();\n            }\n          } else {\n            // if tab key is pressed\n            if (document.activeElement === consentlastFocusableElement) {\n              consentfirstFocusableElement.focus();\n              e.preventDefault();\n            }\n          }\n        } else if (settingsmodal && !isHidden(settingsmodal)) {\n          if (e.shiftKey) {\n            // if shift key pressed for shift + tab combination\n            if (document.activeElement === settingsfirstFocusableElement) {\n              settingslastFocusableElement.focus();\n              e.preventDefault();\n            }\n          } else {\n            // if tab key is pressed\n            if (document.activeElement === settingslastFocusableElement) {\n              settingsfirstFocusableElement.focus();\n              e.preventDefault();\n            }\n          }\n        } else if (policymodal && !isHidden(policymodal)) {\n          if (e.shiftKey) {\n            // if shift key pressed for shift + tab combination\n            if (document.activeElement === policyfirstFocusableElement) {\n              policylastFocusableElement.focus();\n              e.preventDefault();\n            }\n          } else {\n            // if tab key is pressed\n            if (document.activeElement === policylastFocusableElement) {\n              policyfirstFocusableElement.focus();\n              e.preventDefault();\n            }\n          }\n        }\n      }\n\n      window.addEventListener('keydown', handleKeyDown);\n    }\n  }\n};\nvar _default = cookieConcent;\nexports.default = _default;\n\n},{\"jquery\":44}],11:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar CustomFileInput = {\n  fileInput: '.c-dynamic-form__file-input',\n  init: function init() {\n    var $fileInput = (0, _jquery.default)(this.fileInput);\n    $fileInput.each(function () {\n      var $input = (0, _jquery.default)(this),\n          $label = $input.next('label'),\n          labelVal = $label.html();\n      $input.on('change', function (e) {\n        var fileName = '';\n        if (this.files && this.files.length > 1) fileName = (this.getAttribute('data-multiple-caption') || '').replace('{count}', this.files.length);else if (e.target.value) fileName = e.target.value.split('\\\\').pop();\n        if (fileName) $label.find('span.file').html(fileName);else $label.html(labelVal);\n      }); // Firefox bug fix\n\n      $input.on('focus', function () {\n        $input.addClass('has-focus');\n      }).on('blur', function () {\n        $input.removeClass('has-focus');\n      });\n    });\n  }\n};\nvar _default = CustomFileInput;\nexports.default = _default;\n\n},{\"jquery\":44}],12:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentEditor = {\n  elemEditor: '.c-editor',\n  elemEditorLink: '.c-editor__link',\n  init: function init() {\n    var $elemEditorHighlight = 'c-editor__highlight';\n    var $elemEditorHighlightLast = 'c-editor__highlight--last';\n    var $elemEditorIframe = '<p class=\"c-editor__iframe\"></p>';\n    var $elemEditorLink = (0, _jquery.default)(this.elemEditorLink);\n    var $elemEditor = (0, _jquery.default)(this.elemEditor);\n    /* Editor Highlight Link */\n\n    $elemEditorLink.each(function () {\n      if ((0, _jquery.default)(this).hasClass('c-editor__link')) {\n        (0, _jquery.default)(this).wrapInner('<span class=\"c-editor__text\"><span></span></span>');\n        (0, _jquery.default)(this).parent().addClass($elemEditorHighlight);\n      }\n\n      if ((0, _jquery.default)(this).parent().next().length == 0) {\n        (0, _jquery.default)(this).parent().removeClass($elemEditorHighlightLast);\n      } else if ((0, _jquery.default)(this).parent().next().find($elemEditorLink).length == 0) {\n        (0, _jquery.default)(this).parent().addClass($elemEditorHighlightLast);\n      }\n    });\n    /* Editor Iframe */\n\n    $elemEditor.each(function () {\n      (0, _jquery.default)(this).find('iframe').wrap($elemEditorIframe);\n    });\n  }\n};\nvar _default = componentEditor;\nexports.default = _default;\n\n},{\"jquery\":44}],13:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentEventInfo = {\n  elemEventLink: '.c-event-info__link',\n  elemEventWrapper: '.c-event-info__events .c-event-info__wrapper',\n  elemServicesInstructions: '.c-event-info__instructions',\n  init: function init() {\n    var $elemEventLink = (0, _jquery.default)(this.elemEventLink);\n    var $elemEventExpanded = 'c-event-info__secondary--expanded';\n    var $elemEventWrapper = (0, _jquery.default)(this.elemEventWrapper);\n    var $elemServicesInstructions = (0, _jquery.default)(this.elemServicesInstructions);\n    $elemEventLink.on('click', function (e) {\n      e.preventDefault();\n      /* Expand Instruction */\n\n      (0, _jquery.default)(this).parent().parent().parent().parent().toggleClass($elemEventExpanded);\n      (0, _jquery.default)($elemEventWrapper).slideToggle();\n      /* WAI-ARIA */\n\n      if ((0, _jquery.default)(this).parent().parent().parent().siblings($elemServicesInstructions).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).parent().parent().parent().siblings($elemServicesInstructions).attr('aria-hidden', false);\n        return (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).parent().parent().parent().siblings($elemServicesInstructions).attr('aria-hidden', true);\n        return (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n  }\n};\nvar _default = componentEventInfo;\nexports.default = _default;\n\n},{\"jquery\":44}],14:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentEventGroup = {\n  archiveContainer: '#archiveContainer',\n  elemEventPanel: '.c-events__section--panel',\n  elemEventButton: '.c-events__button',\n  elemEventGroup: '.c-events__group',\n  elemList: '.c-events__group',\n  init: function init() {\n    var $archiveContainer = (0, _jquery.default)(this.archiveContainer);\n    var $elemEventGroup = (0, _jquery.default)(this.elemEventGroup);\n    var $elemEventButton = (0, _jquery.default)(this.elemEventButton);\n    var $elemList = (0, _jquery.default)(this.elemList);\n    var $elemButtonExpanded = 'c-events__button--expanded';\n    $archiveContainer.on('click', this.elemEventPanel, function () {\n      (0, _jquery.default)(this).children().children().children($elemEventButton).toggleClass($elemButtonExpanded);\n      (0, _jquery.default)(this).siblings($elemEventGroup).slideToggle('fast');\n\n      if ((0, _jquery.default)(this).next($elemList).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).next($elemList).attr('aria-hidden', false);\n        (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).next($elemList).attr('aria-hidden', true);\n        (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n  }\n};\nvar _default = componentEventGroup;\nexports.default = _default;\n\n},{\"jquery\":44}],15:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentFAQ = {\n  elemServicesLink: '.c-faq__item--question .c-faq__link',\n  elemServicesQuestion: '.c-faq__question',\n  elemSelector: '.c-faq',\n  elemListItem: '.c-faq__item',\n  elemExtend: '.c-faq__extend',\n  elemServicesButton: '.c-faq__button',\n  init: function init() {\n    var $elemServicesLink = (0, _jquery.default)(this.elemServicesLink);\n    var $elemListExpanded = 'c-faq__item--expanded';\n    var $elemListVisible = 'c-faq__item--visible';\n    var $elemServicesQuestion = (0, _jquery.default)(this.elemServicesQuestion);\n    var $elem = (0, _jquery.default)(this.elemSelector);\n    var $elemListItem = (0, _jquery.default)(this.elemListItem);\n    var $elemListItemHidden = '.c-faq__item--hidden';\n    var $elemExtend = (0, _jquery.default)(this.elemExtend);\n    var $elemServicesButton = (0, _jquery.default)(this.elemServicesButton);\n    $elemServicesLink.on('click', function (e) {\n      e.preventDefault();\n      /* Expand Question */\n\n      (0, _jquery.default)(this).parent().parent().parent().toggleClass($elemListExpanded);\n      (0, _jquery.default)(this).parent().parent().siblings().slideToggle();\n      /* WAI-ARIA */\n\n      if ((0, _jquery.default)(this).parent().parent().siblings($elemServicesQuestion).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).parent().parent().siblings($elemServicesQuestion).attr('aria-hidden', false);\n        return (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).parent().parent().siblings($elemServicesQuestion).attr('aria-hidden', true);\n        return (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n    /* Show List Items*/\n\n    $elem.each(function () {\n      (0, _jquery.default)(this).find($elemServicesButton).on('click', function (e) {\n        e.preventDefault();\n        var elemParentSelector = (0, _jquery.default)(this).closest($elem);\n        (0, _jquery.default)($elemListItem).addClass($elemListVisible);\n        (0, _jquery.default)(elemParentSelector).find($elemExtend).hide();\n        (0, _jquery.default)($elemListItemHidden).first().attr('tabindex', -1);\n        (0, _jquery.default)($elemListItemHidden).first().trigger('focus');\n      });\n    });\n  }\n};\nvar _default = componentFAQ;\nexports.default = _default;\n\n},{\"jquery\":44}],16:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentFeedback = {\n  elemButton: '.c-feedback .c-button--small',\n  elemPositive: '.c-feedback .js-button-pos',\n  elemNegative: '.c-feedback .js-button-neg',\n  elemMessage: '.c-feedback__message',\n  elemForm: '.c-feedback__form',\n  elemTextArea: '.c-feedback__textarea',\n  elemSubmit: '.c-feedback__submit .c-button',\n  elemClose: '.c-feedback__close',\n  init: function init() {\n    var $elemButton = (0, _jquery.default)(this.elemButton);\n    var $elemPositive = (0, _jquery.default)(this.elemPositive);\n    var $elemNegative = (0, _jquery.default)(this.elemNegative);\n    var $elemMessage = (0, _jquery.default)(this.elemMessage);\n    var $elemForm = (0, _jquery.default)(this.elemForm);\n    var $elemTextArea = (0, _jquery.default)(this.elemTextArea);\n    var $elemSubmit = (0, _jquery.default)(this.elemSubmit);\n    var $elemClose = (0, _jquery.default)(this.elemClose);\n    $elemPositive.on('click', function () {\n      $elemMessage.addClass('c-feedback__message--visible');\n      $elemButton.attr('disabled', 'true');\n\n      if ($elemMessage.attr('aria-hidden') === 'true') {\n        $elemMessage.attr('aria-hidden', false);\n        return $elemPositive.attr('aria-expanded', true);\n      } else {\n        $elemMessage.attr('aria-hidden', true);\n        return $elemPositive.attr('aria-expanded', false);\n      }\n    });\n    $elemNegative.on('click', function () {\n      $elemForm.addClass('c-feedback__form--visible');\n      $elemButton.attr('disabled', 'true');\n\n      if ($elemForm.attr('aria-hidden') === 'true') {\n        $elemForm.attr('aria-hidden', false);\n        return $elemNegative.attr('aria-expanded', true);\n      } else {\n        $elemForm.attr('aria-hidden', true);\n        return $elemNegative.attr('aria-expanded', false);\n      }\n    });\n    $elemClose.on('click', function () {\n      $elemMessage.removeClass('c-feedback__message--visible');\n      $elemForm.removeClass('c-feedback__form--visible');\n\n      if ($elemMessage.attr('aria-hidden') === 'true') {\n        $elemMessage.attr('aria-hidden', false);\n      } else if ($elemMessage.attr('aria-hidden') === 'false') {\n        $elemMessage.attr('aria-hidden', true);\n      }\n\n      if ($elemForm.attr('aria-hidden') === 'true') {\n        $elemForm.attr('aria-hidden', false);\n      } else {\n        $elemForm.attr('aria-hidden', true);\n      }\n    });\n    $elemSubmit.on('click', function (e) {\n      // Should be if form is validating correctly\n      e.preventDefault();\n      ClearPreviousValidation();\n\n      _jquery.default.ajax({\n        type: 'POST',\n        url: $elemForm.attr('action'),\n        data: $elemForm.serialize(),\n        success: function success() {\n          $elemMessage.removeClass('c-feedback__message--visible');\n          $elemForm.removeClass('c-feedback__form--visible');\n        },\n        error: function error(xhr) {\n          if (xhr.status == 400 && xhr.responseJSON.ValidationErrors) {\n            //validation failed\n            $elemTextArea.after('<span class=\"c-feedback__error\">' + xhr.responseJSON.Message + '</span>');\n          }\n\n          if (xhr.status == 500) {\n            //form threw errors\n            $elemTextArea.after('<span class=\"c-feedback__error\">' + xhr.responseJSON.Message + '</span>');\n          }\n        }\n      });\n    });\n\n    function ClearPreviousValidation() {\n      if ((0, _jquery.default)('.c-feedback__error').length > 0) {\n        (0, _jquery.default)('.c-feedback__error').remove();\n      }\n    }\n  }\n};\nvar _default = componentFeedback;\nexports.default = _default;\n\n},{\"jquery\":44}],17:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nvar _objectFitImages = _interopRequireDefault(require(\"object-fit-images\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentHero = {\n  elemHeroItem: '.c-hero--login .c-hero__item',\n  init: function init() {\n    var $elemHeroItem = (0, _jquery.default)(this.elemHeroItem);\n    var maxWidth = 0;\n    /* Hero Login Buttons - Equal Width */\n\n    $elemHeroItem.each(function () {\n      if ((0, _jquery.default)(this).innerWidth() > maxWidth) {\n        maxWidth = (0, _jquery.default)(this).innerWidth();\n      }\n    });\n\n    var elemHeroWidth = function elemHeroWidth() {\n      if ((0, _jquery.default)(window).width() > 639) {\n        $elemHeroItem.innerWidth(maxWidth);\n      } else {\n        $elemHeroItem.css('width', 'auto');\n      }\n    };\n\n    (0, _jquery.default)(window).resize(function () {\n      elemHeroWidth();\n    });\n    elemHeroWidth();\n    (0, _objectFitImages.default)();\n  }\n};\nvar _default = componentHero;\nexports.default = _default;\n\n},{\"jquery\":44,\"object-fit-images\":45}],18:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentIconList = {\n  elemFiletype: '.c-icon-list-item__filetype',\n  init: function init() {\n    var $elemFiletype = (0, _jquery.default)(this.elemFiletype);\n    var $elemFiletypePDF = 'c-icon-list-item__filetype--pdf';\n    var $elemFiletypeDoc = 'c-icon-list-item__filetype--doc';\n    var $elemFiletypeTxt = 'c-icon-list-item__filetype--txt';\n    var $elemFiletypePPT = 'c-icon-list-item__filetype--ppt';\n    var $elemFiletypeJPG = 'c-icon-list-item__filetype--jpg';\n    var $FilesListPDF = 'a[href$=\".pdf\"]';\n    var $FilesListDoc = 'a[href$=\".doc\"], a[href$=\".docx\"]';\n    var $FilesListTxt = 'a[href$=\".odt\"], a[href$=\".rtf\"], a[href$=\".txt\"]';\n    var $FilesListPPT = 'a[href$=\".ppt\"], a[href$=\".pps\"], a[href$=\".pptx\"]';\n    var $FilesListJPG = 'a[href$=\".ai\"], a[href$=\".eps\"], a[href$=\".ps\"], a[href$=\".svg\"], a[href$=\".gif\"], a[href$=\".jpg\"], a[href$=\".png\"], a[href$=\".psd\"], a[href$=\".tif\"], a[href$=\".tiff\"]';\n    (0, _jquery.default)($FilesListPDF).parent().siblings().find($elemFiletype).addClass($elemFiletypePDF);\n    (0, _jquery.default)($FilesListDoc).parent().siblings().find($elemFiletype).addClass($elemFiletypeDoc);\n    (0, _jquery.default)($FilesListTxt).parent().siblings().find($elemFiletype).addClass($elemFiletypeTxt);\n    (0, _jquery.default)($FilesListPPT).parent().siblings().find($elemFiletype).addClass($elemFiletypePPT);\n    (0, _jquery.default)($FilesListJPG).parent().siblings().find($elemFiletype).addClass($elemFiletypeJPG);\n  }\n};\nvar _default = componentIconList;\nexports.default = _default;\n\n},{\"jquery\":44}],19:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nvar _shave = _interopRequireDefault(require(\"shave\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nrequire('../../helpers/utils/FCInstagram');\n\nvar componentInstagramFeed = {\n  captionSelector: '.c-instagram-feed__caption',\n  shavedCaptionClassName: 'c-instagram-feed__shaved-caption',\n  captionMaxHeight: 90,\n  init: function init() {\n    var $instafeed = (0, _jquery.default)('[data-instafeed]');\n    $instafeed.each(function () {\n      $instafeed = (0, _jquery.default)(this);\n      var $accesstoken = $instafeed.data('accesstoken');\n      var $numberofitems = $instafeed.data('numberofitems');\n      var $autoplayvideos = $instafeed.data('autoplayvideos');\n      console.log($accesstoken);\n      _jquery.default.fn.FCInstagram.accessData = {\n        accessToken: $accesstoken // Token\n\n      };\n      $instafeed.FCInstagram({\n        max: $numberofitems,\n        // A number between 1 and 25 of photos to show. Default: 9\n        autoplay: $autoplayvideos,\n        // Set autoplay video: true/false. Default: false\n        complete: function complete() {\n          // A callback function to execute after the display of the photos.\n          componentInstagramFeed._shaveCaption();\n        }\n      });\n    });\n  },\n  _shaveCaption: function _shaveCaption() {\n    (0, _shave.default)(componentInstagramFeed.captionSelector, componentInstagramFeed.captionMaxHeight, {\n      classname: componentInstagramFeed.shavedCaptionClassName\n    });\n  }\n};\nvar _default = componentInstagramFeed;\nexports.default = _default;\n\n},{\"../../helpers/utils/FCInstagram\":36,\"jquery\":44,\"shave\":46}],20:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentInstructions = {\n  elemInstructionsLink: '.c-instructions__item--instructions .c-instructions__link',\n  elemInstructionsArea: '.c-instructions__area',\n  elemInstructions: '.c-instructions',\n  elemListItem: '.c-instructions__item',\n  elemInstructionsButton: '.c-instructions__button',\n  elemInstructionsClose: '.c-instructions__close',\n  init: function init() {\n    var $elemInstructionsLink = (0, _jquery.default)(this.elemInstructionsLink);\n    var $elemListExpanded = 'c-instructions__item--expanded';\n    var $elemItemVisible = 'c-instructions__item--visible';\n    var $elemButtonExpanded = 'c-instructions__button--expanded';\n    var $elemInstructionsArea = (0, _jquery.default)(this.elemInstructionsArea);\n    var $elemInstructions = (0, _jquery.default)(this.elemInstructions);\n    var $elemListItem = (0, _jquery.default)(this.elemListItem);\n    var $elemInstructionsButton = (0, _jquery.default)(this.elemInstructionsButton);\n    var $elemInstructionsClose = (0, _jquery.default)(this.elemInstructionsClose);\n    $elemInstructionsLink.on('click', function (e) {\n      e.preventDefault();\n      /* Expand Instruction */\n\n      (0, _jquery.default)(this).parent().parent().parent().toggleClass($elemListExpanded);\n      (0, _jquery.default)(this).parent().parent().siblings().slideToggle();\n      /* WAI-ARIA */\n\n      if ((0, _jquery.default)(this).parent().parent().siblings($elemInstructionsArea).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).parent().parent().siblings($elemInstructionsArea).attr('aria-hidden', false);\n        return (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).parent().parent().siblings($elemInstructionsArea).attr('aria-hidden', true);\n        return (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n    $elemInstructionsClose.on('click', function (e) {\n      e.preventDefault();\n      (0, _jquery.default)(this).parent().parent().parent().parent().toggleClass($elemListExpanded);\n      (0, _jquery.default)(this).parent().parent().parent().slideToggle();\n    });\n    /* Show More List Items */\n\n    $elemInstructions.each(function () {\n      (0, _jquery.default)(this).find($elemInstructionsButton).on('click', function (e) {\n        e.preventDefault();\n        (0, _jquery.default)(this).parent().siblings().find($elemListItem).toggleClass($elemItemVisible);\n        (0, _jquery.default)(this).toggleClass($elemButtonExpanded);\n        (0, _jquery.default)(this).children().text(function (i, v) {\n          return v === 'Visa färre' ? 'Visa fler' : 'Visa färre';\n        });\n\n        if ((0, _jquery.default)(this).parent().siblings().children().hasClass($elemItemVisible)) {\n          return (0, _jquery.default)(this).attr('aria-expanded', true);\n        } else {\n          return (0, _jquery.default)(this).attr('aria-expanded', false);\n        }\n      });\n    });\n  }\n};\nvar _default = componentInstructions;\nexports.default = _default;\n\n},{\"jquery\":44}],21:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar cIsyCaseMap = {\n  isyCaseContainer: '.isyCase-container',\n  isyCaseBtn: '.isyCase-button',\n  isyCaseFullscreen: '.isyCase-fullscreen',\n  isyCaseBtnClose: '.isyCase-button-close',\n  isyCaseBtnHidden: '.isyCase-button__hidden',\n  init: function init() {\n    var $isyCaseBtn = (0, _jquery.default)(this.isyCaseBtn);\n    var $isyCaseFullscreen = 'isyCase-fullscreen';\n    var $isyCaseContainer = (0, _jquery.default)(this.isyCaseContainer);\n    var $isyCaseBtnClose = (0, _jquery.default)(this.isyCaseBtnClose);\n    var $isyCaseBtnHidden = 'isyCase-button__hidden';\n    var $isyCaseContainerList = (0, _jquery.default)('.isyCase-container-list');\n    var $isyCaseButtonCloseList = (0, _jquery.default)('.isyCase-button-close-list');\n    var $isyCaseButtonList = (0, _jquery.default)('.isyCase-button-list');\n    var $isyCaseFullscreenList = 'isyCase-fullscreen-list';\n    var $isyCaseBtnListHidden = 'isyCase-button-list__hidden';\n    $isyCaseBtn.on('click', function () {\n      $isyCaseContainer.addClass($isyCaseFullscreen);\n      $isyCaseBtn.addClass($isyCaseBtnHidden);\n      $isyCaseButtonList.addClass($isyCaseBtnListHidden);\n    });\n    $isyCaseBtnClose.on('click', function () {\n      $isyCaseContainer.removeClass($isyCaseFullscreen);\n      $isyCaseBtn.removeClass($isyCaseBtnHidden);\n      $isyCaseButtonList.removeClass($isyCaseBtnListHidden);\n    });\n    $isyCaseButtonList.on('click', function () {\n      var $isyCaseListParent = (0, _jquery.default)(this).parent();\n      $isyCaseListParent.addClass($isyCaseFullscreenList);\n      $isyCaseButtonList.addClass($isyCaseBtnListHidden);\n      $isyCaseBtn.addClass($isyCaseBtnHidden);\n    });\n    $isyCaseButtonCloseList.on('click', function () {\n      $isyCaseContainerList.removeClass($isyCaseFullscreenList);\n      $isyCaseButtonList.removeClass($isyCaseBtnListHidden);\n      $isyCaseBtn.removeClass($isyCaseBtnHidden);\n    });\n  }\n};\nvar _default = cIsyCaseMap;\nexports.default = _default;\n\n},{\"jquery\":44}],22:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentNewsArchive = {\n  elemViewMoreButton: '.viewMoreBtn',\n  elemNewsList: '#newsList',\n  elemLoadNewsCounter: '#loadNewsCounter',\n  init: function init() {\n    if (document.getElementById('newsList') === null) return;\n    var $elemViewMoreButton = (0, _jquery.default)(this.elemViewMoreButton);\n    var $elemNewsList = (0, _jquery.default)(this.elemNewsList);\n    var $elemLoadNewsCounter = (0, _jquery.default)(this.elemLoadNewsCounter);\n    var ajaxUrl = window.newsListConfig.url;\n    var skipTake = window.newsListConfig.skipTake;\n\n    function showMoreBtnVisible() {\n      if ((0, _jquery.default)('ul#newsList li').length < window.newsArchivePagePartialConfig.maxCount) {\n        $elemViewMoreButton.show();\n      } else {\n        $elemViewMoreButton.hide();\n      }\n    }\n\n    $elemViewMoreButton.on('click', function () {\n      var selectedAreas = [];\n      (0, _jquery.default)('.c-select-bar__list input:checked').each(function () {\n        selectedAreas.push(this.value);\n        console.log(this.value);\n      });\n      var loadNewsCounter = $elemLoadNewsCounter;\n      var counter = parseInt(loadNewsCounter.val());\n      counter++;\n      loadNewsCounter.val(counter);\n      var filterParam = {\n        'areas': selectedAreas,\n        'loadNewsCounter': $elemLoadNewsCounter.val(),\n        'skipTake': skipTake\n      };\n\n      _jquery.default.ajax({\n        type: 'POST',\n        url: ajaxUrl,\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'html',\n        data: JSON.stringify(filterParam),\n        success: function success(response) {\n          var newsList = $elemNewsList;\n          (0, _jquery.default)(newsList).append(response);\n          showMoreBtnVisible();\n        },\n        failure: function failure() {}\n      });\n    });\n    (0, _jquery.default)('.c-select-bar__reset').on('click', function () {\n      (0, _jquery.default)('input[type=\\'checkbox\\']:checked').prop('checked', false);\n      (0, _jquery.default)('button.c-select-bar__button span').text('Inga utvalda ämnen');\n      GetFilteredEvents();\n    });\n    (0, _jquery.default)('.c-select-bar__input').on('change', function () {\n      var numberOfCheckedSubjects = (0, _jquery.default)('input:checkbox:checked').length;\n\n      if (numberOfCheckedSubjects == 0) {\n        (0, _jquery.default)('button.c-select-bar__button span').text('Inga utvalda ämnen');\n      } else {\n        (0, _jquery.default)('button.c-select-bar__button span').text(numberOfCheckedSubjects + ' valda ämnen');\n      }\n\n      GetFilteredEvents();\n    });\n\n    function GetFilteredEvents() {\n      var selectedAreas = [];\n      (0, _jquery.default)('.c-select-bar__list input:checked').each(function () {\n        selectedAreas.push(this.value);\n      });\n      var loadNewsCounter = '0';\n      var filterParam = {\n        'areas': selectedAreas,\n        'loadNewsCounter': loadNewsCounter,\n        'skipTake': skipTake\n      };\n\n      _jquery.default.ajax({\n        type: 'POST',\n        url: ajaxUrl,\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'html',\n        data: JSON.stringify(filterParam),\n        success: function success(response) {\n          $elemNewsList.html(response);\n          $elemLoadNewsCounter.val(0);\n          showMoreBtnVisible();\n        },\n        failure: function failure() {}\n      });\n    }\n  }\n};\nvar _default = componentNewsArchive;\nexports.default = _default;\n\n},{\"jquery\":44}],23:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentPermitFilter = {\n  elemFilterExtend: '[data-permit-filter-extend]',\n  elemFilter: '[data-permit-filters]',\n  elemFilterWrapper: '[data-permit-filter-wrapper]',\n  filterExpandClass: 'c-permit-filter__outer--expanded',\n  extendExpandClass: 'c-permit-filter__extend--expanded',\n  extendShowClass: 'c-permit-filter__extend--show',\n  elemFilterButton: '[data-permit-filter-button]',\n  filterButtonActiveClass: 'c-permit-filter__button--active',\n  elemAppliedFiltersWrapper: '[data-permit-filter-applied-filter-wrapper]',\n  elemRemoveFilters: '[data-permit-filter-remove-filters]',\n  appliedFiltersShowClass: 'c-permit-filter__applied--show',\n  elemClearFilters: '[data-permit-filter-clear]',\n  elemViewMoreButton: '[data-view-more-button]',\n  elemBuildingPermitList: '[data-permit-list]',\n  elemBuildingPermitListItems: '.p-permit-listing__list .c-permit-card',\n  elemBuildingPermitResultLabel: '.p-permit-listing__label',\n  searchForm: '[data-permit-search-form]',\n  filterList: [],\n  init: function init() {\n    this.__expandButton(this);\n\n    this.__filterButtons(this);\n\n    this.__toggleAppliedFilters(this);\n\n    this.__viewMoreButton(this);\n\n    this.__searchForm();\n  },\n  updatePermitList: function updatePermitList(filterParam) {\n    var self = this;\n\n    _jquery.default.ajax({\n      type: 'POST',\n      url: window.permitListPageConfig.url,\n      contentType: 'application/json; charset=utf-8',\n      dataType: 'html',\n      data: JSON.stringify(filterParam),\n      success: function success(response) {\n        var buildPermitList = (0, _jquery.default)(componentPermitFilter.elemBuildingPermitList);\n        buildPermitList.html(response);\n        var itemsInList = (0, _jquery.default)(componentPermitFilter.elemBuildingPermitListItems).length;\n\n        if (itemsInList < window.permitListPageConfig.totalResults) {\n          (0, _jquery.default)(self.elemViewMoreButton).show();\n        } else {\n          (0, _jquery.default)(self.elemViewMoreButton).hide();\n        }\n\n        (0, _jquery.default)(componentPermitFilter.elemBuildingPermitResultLabel).html(window.permitListPageConfig.resultSummaryString.replace('X', itemsInList));\n      }\n    });\n  },\n  __encodeString: function __encodeString(s) {\n    return encodeURI(s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#39;').replace(/\"/g, '&#34;'));\n  },\n  __searchForm: function __searchForm() {\n    var self = this;\n    (0, _jquery.default)('[data-permit-search-form]').on('submit', function (e) {\n      e.preventDefault();\n\n      var q = self.__encodeString((0, _jquery.default)(this).find('input[name=q]').val());\n\n      self.updatePermitList({\n        filterList: self.filterList,\n        page: 1,\n        q: q\n      });\n      window.history.pushState(null, null, '?q=' + q);\n    });\n  },\n  __expandButton: function __expandButton(self) {\n    if ((0, _jquery.default)(self.elemFilter).outerHeight() - 1 > (0, _jquery.default)(self.elemFilterWrapper).outerHeight()) {\n      (0, _jquery.default)(self.elemFilterExtend).toggleClass(self.extendShowClass, true);\n    }\n\n    (0, _jquery.default)(self.elemFilterExtend).on('click', function () {\n      (0, _jquery.default)(self.elemFilterWrapper).toggleClass(self.filterExpandClass, true);\n      (0, _jquery.default)(self.elemFilterExtend).toggleClass(self.extendExpandClass, true);\n    });\n  },\n  __filterButtons: function __filterButtons(self) {\n    (0, _jquery.default)(self.elemFilterButton).on('click', function () {\n      var id = (0, _jquery.default)(this).data('identifier');\n\n      if ((0, _jquery.default)(this).hasClass(self.filterButtonActiveClass)) {\n        self.__removeFilter(self, id, self.filterList);\n      } else {\n        self.__addFilter(self, id, self.filterList);\n      }\n\n      self.__toggleAppliedFilters(self);\n    });\n    (0, _jquery.default)(self.elemClearFilters).on('click', function () {\n      self.__clearFilters(self, self.filterList);\n\n      self.__toggleAppliedFilters(self);\n    });\n  },\n  __toggleAppliedFilters: function __toggleAppliedFilters(self) {\n    if ((0, _jquery.default)(self.elemRemoveFilters).find((0, _jquery.default)(self.elemFilterButton)).length > 0) {\n      (0, _jquery.default)(self.elemAppliedFiltersWrapper).toggleClass(self.appliedFiltersShowClass, true);\n    } else {\n      (0, _jquery.default)(self.elemAppliedFiltersWrapper).toggleClass(self.appliedFiltersShowClass, false);\n    }\n  },\n  __removeFilter: function __removeFilter(self, id) {\n    var $filterButtons = (0, _jquery.default)('[data-identifier=\"' + id + '\"]');\n    $filterButtons.toggleClass(self.filterButtonActiveClass, false);\n    (0, _jquery.default)(self.elemRemoveFilters).find($filterButtons).remove();\n    var filterIndex = self.filterList.indexOf(id);\n\n    if (filterIndex > -1) {\n      self.filterList.splice(filterIndex, 1);\n    }\n\n    var filterParam = {\n      'filterList': self.filterList,\n      'page': 1,\n      'q': window.permitListPageConfig.query\n    };\n    this.updatePermitList(filterParam);\n  },\n  __addFilter: function __addFilter(self, id) {\n    var $filterButtons = (0, _jquery.default)('[data-identifier=\"' + id + '\"]');\n    $filterButtons.toggleClass(self.filterButtonActiveClass, true);\n    var $filterButtonClones = $filterButtons.clone(true);\n    (0, _jquery.default)(self.elemRemoveFilters).append($filterButtonClones);\n    self.filterList.push(id);\n    var filterParam = {\n      'filterList': self.filterList,\n      'page': 1,\n      'q': window.permitListPageConfig.query\n    };\n    this.updatePermitList(filterParam);\n  },\n  __clearFilters: function __clearFilters(self) {\n    var $filterButtons = (0, _jquery.default)(self.elemFilterButton);\n    $filterButtons.toggleClass(self.filterButtonActiveClass, false);\n    (0, _jquery.default)(self.elemRemoveFilters).find($filterButtons).remove();\n    self.filterList.splice(0, self.filterList.length);\n    var filterParam = {\n      'filterList': self.filterList,\n      'page': 1,\n      'q': window.permitListPageConfig.query\n    };\n    this.updatePermitList(filterParam);\n  },\n  __viewMoreButton: function __viewMoreButton(self) {\n    (0, _jquery.default)(self.elemViewMoreButton).on('click', function () {\n      var page = window.permitListPageConfig.page + 1;\n      var filterParam = {\n        'filterList': self.filterList,\n        'page': page,\n        'q': window.permitListPageConfig.query\n      };\n\n      _jquery.default.ajax({\n        type: 'POST',\n        url: window.permitListPageConfig.url,\n        contentType: 'application/json; charset=utf-8',\n        dataType: 'html',\n        data: JSON.stringify(filterParam),\n        success: function success(response) {\n          var resultContainer = (0, _jquery.default)(componentPermitFilter.elemBuildingPermitList);\n          resultContainer.append(response);\n          var itemsInList = (0, _jquery.default)(componentPermitFilter.elemBuildingPermitListItems).length;\n\n          if (itemsInList < window.permitListPageConfig.totalResults) {\n            (0, _jquery.default)(self.elemViewMoreButton).show();\n          } else {\n            (0, _jquery.default)(self.elemViewMoreButton).hide();\n          }\n\n          (0, _jquery.default)(componentPermitFilter.elemBuildingPermitResultLabel).html(window.permitListPageConfig.resultSummaryString.replace('X', itemsInList));\n        }\n      });\n    });\n  }\n};\nvar _default = componentPermitFilter;\nexports.default = _default;\n\n},{\"jquery\":44}],24:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentProgressBar = {\n  elem: '[data-progress-bar]',\n  count: '[data-count]',\n  total: '[data-total]',\n  progress: '[data-progress]',\n  init: function init() {\n    var self = this;\n    (0, _jquery.default)(self.elem).each(function () {\n      var $countLabel = (0, _jquery.default)(this).find(self.count).text();\n      var $totalLabel = (0, _jquery.default)(this).find(self.total).text();\n      var $progress = (0, _jquery.default)(this).find(self.progress);\n      var count = parseInt($countLabel);\n      var total = parseInt($totalLabel);\n      $progress.css('width', self._getPercent(count, total) + '%');\n    });\n  },\n  _getPercent: function _getPercent(count, total) {\n    var percent = 0;\n    percent = count / total * 100;\n    return percent;\n  }\n};\nvar _default = componentProgressBar;\nexports.default = _default;\n\n},{\"jquery\":44}],25:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentSerachFilter = {\n  elemSearchExpand: '.c-search-filter__button--expand',\n  elemSearchFilter: '.c-search-filter__outer--filter',\n  elemSearchOuter: '.c-search-filter__outer--first',\n  elemSelectBar: '.c-search-filter .c-select-bar__select',\n  elemSearchReset: '.c-search-filter__button--reset',\n  elemSearchSelected: '.c-search-filter__link.c-search-filter__link--selected',\n  init: function init() {\n    var $elemSearchExpand = (0, _jquery.default)(this.elemSearchExpand);\n    var $elemSearchFilter = (0, _jquery.default)(this.elemSearchFilter);\n    var $elemSearchOuter = (0, _jquery.default)(this.elemSearchOuter);\n    var $elemSelectBar = (0, _jquery.default)(this.elemSelectBar);\n    var $elemSearchReset = (0, _jquery.default)(this.elemSearchReset);\n    var $elemSearchSelected = (0, _jquery.default)(this.elemSearchSelected);\n    var $elemSearchExpanded = 'c-search-filter__button--expanded';\n    $elemSearchExpand.on('click', function (e) {\n      e.preventDefault();\n      (0, _jquery.default)($elemSearchFilter).slideToggle('fast');\n      (0, _jquery.default)(this).toggleClass($elemSearchExpanded);\n      /* WAI-ARIA */\n\n      if ((0, _jquery.default)(this).closest($elemSearchOuter).siblings($elemSearchFilter).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).closest($elemSearchOuter).siblings($elemSearchFilter).attr('aria-hidden', false);\n        return (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).closest($elemSearchOuter).siblings($elemSearchFilter).attr('aria-hidden', true);\n        return (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n\n    if ((0, _jquery.default)($elemSearchSelected).length > 0 || $elemSelectBar.val() !== '') {\n      (0, _jquery.default)($elemSearchReset).show();\n    }\n  }\n};\nvar _default = componentSerachFilter;\nexports.default = _default;\n\n},{\"jquery\":44}],26:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentSearchForm = {\n  elemSearchInput: '.has-autocomplete',\n  elemSearchSuggestionContainer: 'div[class$=\"__autocomplete\"]',\n  displayElement: function displayElement(element) {\n    element.removeAttr('aria-hidden');\n    element.show();\n  },\n  hideElement: function hideElement(element) {\n    element.attr('aria-hidden', 'true');\n    element.hide();\n  },\n  bindSearchInputKeyboardNavigation: function bindSearchInputKeyboardNavigation(element) {\n    element.keydown(function (e) {\n      var $siblingSuggestionContainer = (0, _jquery.default)(this).siblings(componentSearchForm.elemSearchSuggestionContainer);\n      var keyCode = e.keyCode || e.which,\n          downArrow = 40;\n\n      if (keyCode == downArrow && $siblingSuggestionContainer.is(':visible')) {\n        e.preventDefault();\n        document.body.classList.add('using-keyboard');\n        $siblingSuggestionContainer.find('ul li:first-child').focus();\n      }\n    });\n  },\n  bindAutoCompleteKeyboardNavigation: function bindAutoCompleteKeyboardNavigation(element) {\n    element.keydown(function (e) {\n      var $siblingSearchInput = (0, _jquery.default)(this).siblings(componentSearchForm.elemSearchInput);\n      var keyCode = e.keyCode || e.which,\n          enter = 13,\n          esc = 27,\n          upArrow = 38,\n          downArrow = 40;\n\n      if (keyCode == upArrow || keyCode == downArrow) {\n        e.preventDefault();\n      }\n\n      switch (keyCode) {\n        case enter:\n          (0, _jquery.default)(document.activeElement).trigger('click');\n          break;\n\n        case upArrow:\n          (0, _jquery.default)(document.activeElement).prev().focus();\n          break;\n\n        case downArrow:\n          (0, _jquery.default)(document.activeElement).next().focus();\n          break;\n\n        case esc:\n          componentSearchForm.hideElement((0, _jquery.default)(this));\n          $siblingSearchInput.focus();\n          break;\n      }\n    });\n  },\n  bindHideElementOnClickOutside: function bindHideElementOnClickOutside(element) {\n    (0, _jquery.default)('body').on('click', function (event) {\n      if (!element.is(event.target) && element.has(event.target).length === 0) {\n        componentSearchForm.hideElement(element);\n      }\n    });\n  },\n  bindAutoCompleteAction: function bindAutoCompleteAction(suggestionsContainer, suggestionSelector) {\n    suggestionsContainer.on('click', suggestionSelector, function () {\n      componentSearchForm.hideElement(suggestionsContainer);\n      var querySuggestion = (0, _jquery.default)(this).find('span').text();\n      var $currentSearchInput = (0, _jquery.default)(this).parents('form').children(componentSearchForm.elemSearchInput);\n      $currentSearchInput.val(querySuggestion);\n      $currentSearchInput.parent('form').submit();\n    });\n  },\n  init: function init() {\n    var $elemSearchInput = (0, _jquery.default)(this.elemSearchInput);\n    var $elemSearchSuggestionContainer = (0, _jquery.default)(this.elemSearchSuggestionContainer);\n    var letterLimit = 2;\n    var resultCount = 5;\n    var queryUrl = '/find_v2/_autocomplete';\n    var queryInProgress = false;\n    var currentHits = '';\n    $elemSearchInput.on('keyup', function () {\n      var query = (0, _jquery.default)(this).val();\n      var $currentSuggestionContainer = (0, _jquery.default)(this).siblings(componentSearchForm.elemSearchSuggestionContainer);\n\n      if (query.length > letterLimit && !queryInProgress) {\n        queryInProgress = true;\n\n        _jquery.default.ajax({\n          url: queryUrl,\n          dataType: 'json',\n          data: {\n            prefix: query,\n            size: resultCount\n          },\n          success: function success(data) {\n            if (data.hits.length > 0 && currentHits !== data.hits) {\n              var $currentSuggestionsList = $currentSuggestionContainer.find('ul'); // remove any old results\n\n              $currentSuggestionsList.empty();\n\n              _jquery.default.each(data.hits, function (index, value) {\n                var elemSuggestionsListItem = document.createElement('li');\n                elemSuggestionsListItem.setAttribute('role', 'option');\n                elemSuggestionsListItem.setAttribute('tabindex', 0);\n                var elemSuggestionSpan = document.createElement('span');\n                elemSuggestionSpan.innerText = value.query;\n                elemSuggestionsListItem.appendChild(elemSuggestionSpan);\n                $currentSuggestionsList.append(elemSuggestionsListItem);\n              });\n\n              componentSearchForm.displayElement($currentSuggestionContainer);\n              currentHits = data.hits;\n            } else if (data.hits.length == 0) {\n              componentSearchForm.hideElement($currentSuggestionContainer);\n            }\n          },\n          complete: function complete() {\n            queryInProgress = false;\n          },\n          error: function error() {\n            queryInProgress = false;\n          }\n        });\n      } else if (query.length < letterLimit) {\n        componentSearchForm.hideElement($currentSuggestionContainer);\n      }\n    });\n    componentSearchForm.bindAutoCompleteAction($elemSearchSuggestionContainer, 'li');\n    componentSearchForm.bindHideElementOnClickOutside($elemSearchSuggestionContainer);\n    componentSearchForm.bindSearchInputKeyboardNavigation($elemSearchInput);\n    componentSearchForm.bindAutoCompleteKeyboardNavigation($elemSearchSuggestionContainer);\n  }\n};\nvar _default = componentSearchForm;\nexports.default = _default;\n\n},{\"jquery\":44}],27:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar componentSelectBar = {\n  archiveContainer: '#archiveContainer',\n  elemSelectButton: '.c-select-bar__button',\n  elemSelectList: '.c-select-bar__list',\n  init: function init() {\n    var $archiveContainer = (0, _jquery.default)(this.archiveContainer);\n    var $elemSelectList = (0, _jquery.default)(this.elemSelectList);\n    var $elemCategoriesExpanded = 'c-select-bar__categories--expanded';\n    $archiveContainer.on('click', this.elemSelectButton, function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      (0, _jquery.default)($elemSelectList).toggle();\n      (0, _jquery.default)($elemSelectList).parent().toggleClass($elemCategoriesExpanded);\n\n      if ((0, _jquery.default)(this).next($elemSelectList).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).next($elemSelectList).attr('aria-hidden', false);\n        (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).next($elemSelectList).attr('aria-hidden', true);\n        (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n    (0, _jquery.default)('body').on('click', function (e) {\n      if ($elemSelectList.is(':visible') && e.target !== $elemSelectList[0] && !$elemSelectList.has(e.target).length) {\n        $elemSelectList.toggle();\n        (0, _jquery.default)($elemSelectList).parent().toggleClass($elemCategoriesExpanded);\n      }\n    });\n  }\n};\nvar _default = componentSelectBar;\nexports.default = _default;\n\n},{\"jquery\":44}],28:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar baseTypography = {\n  init: function init() {\n    if (!$('body').hasClass('edit-mode-active')) {\n      document.body.addEventListener('mousedown', function () {\n        document.body.classList.remove('using-keyboard');\n      });\n      document.body.addEventListener('keydown', function (e) {\n        var $code = e.keyCode || e.which;\n\n        if ($code == '9') {\n          document.body.classList.add('using-keyboard');\n        }\n      });\n    }\n  }\n};\nvar _default = baseTypography;\nexports.default = _default;\n\n},{}],29:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar globalHeader = {\n  elemHeaderSearchIcon: '.g-header__icon--search',\n  elemHeaderMenuIcon: '.g-header__icon--menu',\n  elemSearchMobile: '.g-search--mobile',\n  elemNavMobile: '.g-navigation-mobile',\n  init: function init() {\n    var $elemHeaderSearchIcon = (0, _jquery.default)(this.elemHeaderSearchIcon);\n    var $elemHeaderMenuIcon = (0, _jquery.default)(this.elemHeaderMenuIcon);\n    var $elemSearchMobile = (0, _jquery.default)(this.elemSearchMobile);\n    var $elemNavMobile = (0, _jquery.default)(this.elemNavMobile);\n    var $elemIconExpanded = 'g-header__icon--expanded';\n    $elemHeaderSearchIcon.on('click', function (e) {\n      e.stopPropagation();\n      (0, _jquery.default)($elemSearchMobile).toggle();\n      (0, _jquery.default)($elemNavMobile).hide();\n      (0, _jquery.default)($elemHeaderMenuIcon).removeClass($elemIconExpanded);\n      (0, _jquery.default)(this).toggleClass($elemIconExpanded);\n\n      if ($elemSearchMobile.attr('aria-hidden') === 'true') {\n        $elemSearchMobile.attr('aria-hidden', false);\n        return $elemHeaderSearchIcon.attr('aria-expanded', true);\n      } else {\n        $elemSearchMobile.attr('aria-hidden', true);\n        return $elemHeaderSearchIcon.attr('aria-expanded', false);\n      }\n    }), $elemHeaderMenuIcon.on('click', function (e) {\n      e.stopPropagation();\n      (0, _jquery.default)($elemSearchMobile).hide();\n      (0, _jquery.default)($elemNavMobile).toggle();\n      (0, _jquery.default)($elemHeaderSearchIcon).removeClass($elemIconExpanded);\n      (0, _jquery.default)(this).toggleClass($elemIconExpanded);\n\n      if ($elemNavMobile.attr('aria-hidden') === 'true') {\n        $elemNavMobile.attr('aria-hidden', false);\n        return $elemHeaderMenuIcon.attr('aria-expanded', true);\n      } else {\n        $elemNavMobile.attr('aria-hidden', true);\n        return $elemHeaderMenuIcon.attr('aria-expanded', false);\n      }\n    });\n    (0, _jquery.default)(document).click(function (e) {\n      if (!$elemNavMobile.is(e.target) && $elemNavMobile.has(e.target).length === 0) {\n        $elemNavMobile.hide();\n        (0, _jquery.default)($elemHeaderMenuIcon).removeClass($elemIconExpanded);\n      }\n\n      if (!$elemSearchMobile.is(e.target) && $elemSearchMobile.has(e.target).length === 0) {\n        $elemSearchMobile.hide();\n        (0, _jquery.default)($elemHeaderSearchIcon).removeClass($elemIconExpanded);\n      }\n    });\n  }\n};\n\nfunction toggleOverlay() {\n  var overlay = document.querySelector('.overlay');\n  var mobileNav = document.querySelector('.g-navigation-mobile');\n  var scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n\n  if (mobileNav && getComputedStyle(mobileNav).display === 'block') {\n    if (scrollTop <= 255) {\n      overlay.style.top = '255px';\n    } else {\n      overlay.style.top = '0';\n    }\n  }\n}\n\nwindow.addEventListener('scroll', toggleOverlay);\nvar menuIcon = document.querySelector('.overlay');\nvar mobileNav = document.querySelector('.g-header__icon');\nnew MutationObserver(function (mutations) {\n  mutations.forEach(function (mutation) {\n    if (mutation.attributeName === 'aria-expanded') {\n      var ariaExpanded = mutation.target.getAttribute('aria-expanded');\n      menuIcon.style.display = ariaExpanded === 'true' ? 'block' : 'none';\n      toggleOverlay();\n    }\n  });\n}).observe(mobileNav, {\n  attributes: true\n});\nvar _default = globalHeader;\nexports.default = _default;\n\n},{\"jquery\":44}],30:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar globalNavMobile = {\n  elemMobileExpand: '.g-navigation-mobile__button',\n  elemMobileList: '.g-navigation-mobile__list',\n  init: function init() {\n    var $elemMobileExpand = (0, _jquery.default)(this.elemMobileExpand);\n    var $elemMobileExpanded = 'g-navigation-mobile__button--collapsed';\n    var $elemListExpanded = 'g-navigation-mobile__item--expanded';\n    var $elemMobileList = (0, _jquery.default)(this.elemMobileList);\n    $elemMobileExpand.on('click', function () {\n      if ((0, _jquery.default)(this).next('ul').is(':visible')) {\n        (0, _jquery.default)(this).addClass($elemMobileExpanded);\n      } else {\n        (0, _jquery.default)(this).removeClass($elemMobileExpanded);\n      }\n\n      (0, _jquery.default)(this).parent().toggleClass($elemListExpanded);\n      (0, _jquery.default)(this).next('ul').slideToggle();\n\n      if ((0, _jquery.default)(this).next($elemMobileList).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).next($elemMobileList).attr('aria-hidden', false);\n        return (0, _jquery.default)(this).attr('aria-expanded', false);\n      } else {\n        (0, _jquery.default)(this).next($elemMobileList).attr('aria-hidden', true);\n        return (0, _jquery.default)(this).attr('aria-expanded', true);\n      }\n    });\n  }\n};\nvar _default = globalNavMobile;\nexports.default = _default;\n\n},{\"jquery\":44}],31:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar globalSidenav = {\n  elemExpand: '.g-navigation-side__button',\n  elemList: '.g-navigation-side__list',\n  init: function init() {\n    var $elemExpand = (0, _jquery.default)(this.elemExpand);\n    var $elemList = (0, _jquery.default)(this.elemList);\n    var $elemButtonExpanded = 'g-navigation-side__button--expanded';\n    var $elemItemExpanded = 'g-navigation-side__item--expanded';\n    $elemExpand.on('click', function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      (0, _jquery.default)(this).next().slideToggle('fast');\n      (0, _jquery.default)(this).parent().toggleClass($elemItemExpanded);\n      (0, _jquery.default)(this).toggleClass($elemButtonExpanded);\n\n      if ((0, _jquery.default)(this).next($elemList).attr('aria-hidden') === 'true') {\n        (0, _jquery.default)(this).next($elemList).attr('aria-hidden', false);\n        return (0, _jquery.default)(this).attr('aria-expanded', true);\n      } else {\n        (0, _jquery.default)(this).next($elemList).attr('aria-hidden', true);\n        return (0, _jquery.default)(this).attr('aria-expanded', false);\n      }\n    });\n  }\n};\nvar _default = globalSidenav;\nexports.default = _default;\n\n},{\"jquery\":44}],32:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar globalSearch = {\n  elemSearch: '.g-search',\n  elemSearchInput: '.g-search__input',\n  elemSearchClear: '.g-search__clear',\n  init: function init() {\n    var $elemSearch = (0, _jquery.default)(this.elemSearch);\n    var $elemSearchInput = (0, _jquery.default)(this.elemSearchInput);\n    var $elemSearchClear = (0, _jquery.default)(this.elemSearchClear);\n    $elemSearch.each(function () {\n      if (!window.matchMedia('(max-width: 639px)').matches) {\n        $elemSearchInput.on('input', function () {\n          $elemSearchClear.toggle(!!this.value);\n        });\n      }\n\n      if (window.matchMedia('(max-width: 639px)').matches) {\n        $elemSearchInput.attr('placeholder', 'Sök');\n      }\n\n      $elemSearchClear.on('touchstart click', function (e) {\n        e.preventDefault();\n        $elemSearchInput.val('').trigger('input');\n      });\n    });\n  }\n};\nvar _default = globalSearch;\nexports.default = _default;\n\n},{\"jquery\":44}],33:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _storage = _interopRequireDefault(require(\"../utils/storage\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar controlPoints = {\n  controlPointsKey: '',\n  controlPlanKey: 'controlPlan',\n  controlPoints: [],\n  init: function init() {\n    this._initControlPlanSelector();\n\n    this.controlPointsKey = 'controlPoints-' + _storage.default.get(this.controlPlanKey);\n\n    if (!window.controlPlanConfig) {\n      return;\n    }\n\n    this.controlPoints = _storage.default.get(this.controlPointsKey);\n\n    this._renderControlPoints();\n  },\n  _initControlPlanSelector: function _initControlPlanSelector() {\n    var controlPlanSelector = $('[data-controlplan-selector]');\n\n    if (controlPlanSelector.length) {\n      var selectedControlPlan = _storage.default.get(this.controlPlanKey);\n\n      var selectedControlPlanIsAvailable = controlPlanSelector.children('option[value=' + selectedControlPlan + ']').length;\n\n      if (selectedControlPlan && selectedControlPlanIsAvailable) {\n        controlPlanSelector.val(selectedControlPlan);\n      } else {\n        _storage.default.set(this.controlPlanKey, controlPlanSelector.val());\n      }\n\n      var self = this;\n      $('[data-controlplan-selector]').on('change', function (e) {\n        _storage.default.set(self.controlPlanKey, $(e.currentTarget).val());\n      });\n    }\n  },\n  _initStorage: function _initStorage() {\n    _storage.default.set(this.controlPointsKey, window.controlPlanConfig.controlPoints);\n\n    this.controlPoints = window.controlPlanConfig.controlPoints;\n  },\n  _initControlPointsEvents: function _initControlPointsEvents() {\n    var controlPointsContainer = $('[data-control-points]');\n\n    if (!controlPointsContainer.length) {\n      return;\n    }\n\n    var actionButtons = controlPointsContainer.find('[data-form-action=button]');\n    var removeButtons = controlPointsContainer.find('[data-control-point-remove]');\n    var editButtons = controlPointsContainer.find('[data-control-point-edit]');\n    actionButtons.off('click');\n    removeButtons.off('click');\n    editButtons.off('click');\n    var self = this;\n    actionButtons.on('click', function (e) {\n      e.preventDefault();\n      var form = $(e.currentTarget).closest('form');\n      var identifier = form.data('edit-identifier');\n      form.data('edit-identifier', null);\n      var controlPointsIdentifier = $(e.currentTarget).closest('[data-controlpoints-identifier]').data('controlpoints-identifier');\n\n      if (!controlPointsIdentifier) {\n        return;\n      }\n\n      if (identifier) {\n        var controlPoint = self._getControlPoint(identifier);\n\n        Object.keys(controlPoint).forEach(function (key) {\n          var elem = form.find('[data-reference=' + key + ']');\n\n          if (elem.val()) {\n            controlPoint[key] = elem.val();\n          }\n        });\n      } else {\n        for (var i = 0; i < self.controlPoints.length; i++) {\n          var controlPointsItem = self.controlPoints[i];\n\n          if (controlPointsItem.Identifier == controlPointsIdentifier) {\n            controlPointsItem.ControlPoints.push({\n              Identifier: window.controlPlanConfig.newIdentifier,\n              Heading: form.find('[data-reference=Heading]').val(),\n              Performer: form.find('[data-reference=Performer]').val(),\n              Method: form.find('[data-reference=Method]').val(),\n              ControlTarget: form.find('[data-reference=ControlTarget]').val(),\n              Remark: form.find('[data-reference=Remark]').val(),\n              Visible: true\n            });\n            break;\n          }\n        }\n      }\n\n      self._saveControlPoints();\n\n      self._renderControlPoint(controlPointsIdentifier);\n    });\n    removeButtons.on('click', function (e) {\n      var identifier = self._getControlPointIdentifierForContainedElement(e.currentTarget);\n\n      if (!identifier) {\n        return;\n      }\n\n      var controlPointsIdentifier = $(e.currentTarget).closest('[data-controlpoints-identifier]').data('controlpoints-identifier');\n\n      if (!controlPointsIdentifier) {\n        return;\n      }\n\n      var controlPoint = self._getControlPoint(identifier);\n\n      if (controlPoint) {\n        controlPoint.Visible = false;\n\n        self._saveControlPoints();\n\n        self._renderControlPoint(controlPointsIdentifier);\n      }\n    });\n    editButtons.on('click', function (e) {\n      var identifier = self._getControlPointIdentifierForContainedElement(e.currentTarget);\n\n      if (!identifier) {\n        return;\n      }\n\n      var controlPoint = self._getControlPoint(identifier);\n\n      if (!controlPoint) {\n        return;\n      }\n\n      var form = self._getControlPointForm(controlPoint);\n\n      if (!form) {\n        return;\n      }\n\n      Object.keys(controlPoint).forEach(function (key) {\n        form.find('[data-reference=' + key + ']').val(self._decodeHtml(controlPoint[key]));\n      });\n      form.find('[data-form-action=button]').html(window.controlPlanConfig.saveControlPointText);\n      form.data('edit-identifier', identifier);\n      $([document.documentElement, document.body]).animate({\n        scrollTop: form.offset().top\n      }, 500);\n    });\n  },\n  _getControlPoint: function _getControlPoint(identifier) {\n    for (var i = 0; i < this.controlPoints.length; i++) {\n      var controlPointsItem = this.controlPoints[i];\n\n      for (var j = 0; j < controlPointsItem.ControlPoints.length; j++) {\n        var controlPoint = controlPointsItem.ControlPoints[j];\n\n        if (controlPoint.Identifier == identifier) {\n          return controlPoint;\n        }\n      }\n    }\n\n    return null;\n  },\n  _renderControlPoint: function _renderControlPoint(identifier) {\n    if (!identifier) {\n      return;\n    }\n\n    var controlPointsContainer = $('[data-control-points]');\n\n    if (!controlPointsContainer.length) {\n      return;\n    }\n\n    var controlPointContainer = controlPointsContainer.find('[data-controlpoints-identifier=' + identifier + ']');\n\n    if (!controlPointContainer.length) {\n      return;\n    }\n\n    var controlPoints = this.controlPoints.filter(function (p) {\n      return p.Identifier == identifier;\n    });\n\n    if (!controlPoints.length) {\n      return;\n    }\n\n    var self = this;\n    $.ajax({\n      type: 'POST',\n      url: window.controlPlanConfig.controlPointUrl,\n      contentType: 'application/json',\n      data: JSON.stringify({\n        clientControlPoints: controlPoints[0]\n      }),\n      success: function success(data) {\n        if (!data) {\n          return;\n        }\n\n        controlPointContainer.replaceWith(data);\n\n        self._initStorage();\n\n        self._initControlPointsEvents();\n      },\n      error: function error() {\n        controlPointContainer.html(window.controlPlanConfig.generalErrorText);\n      }\n    });\n  },\n  _renderControlPoints: function _renderControlPoints() {\n    var controlPointsContainer = $('[data-control-points]');\n\n    if (!controlPointsContainer.length) {\n      return;\n    }\n\n    var self = this;\n    $.ajax({\n      type: 'POST',\n      url: window.controlPlanConfig.controlPointsUrl,\n      contentType: 'application/json',\n      data: JSON.stringify({\n        clientControlPoints: this.controlPoints,\n        selectedPlan: _storage.default.get(this.controlPlanKey)\n      }),\n      success: function success(data) {\n        if (!data) {\n          return;\n        }\n\n        controlPointsContainer.html(data);\n\n        self._initStorage();\n\n        self._initControlPointsEvents();\n      },\n      error: function error() {\n        controlPointsContainer.html(window.controlPlanConfig.generalErrorText);\n      }\n    });\n  },\n  _getControlPointIdentifierForContainedElement: function _getControlPointIdentifierForContainedElement(element) {\n    var controlPoint = this._getControlPointForContainedElement(element);\n\n    if (controlPoint) {\n      return controlPoint.data('control-point');\n    }\n\n    return null;\n  },\n  _getControlPointForContainedElement: function _getControlPointForContainedElement(element) {\n    return $(element).closest('[data-control-point]');\n  },\n  _getControlPointForm: function _getControlPointForm(controlPoint) {\n    return $('[data-control-point=' + controlPoint.Identifier + ']').parent().children('form');\n  },\n  _saveControlPoints: function _saveControlPoints() {\n    _storage.default.set(this.controlPointsKey, this.controlPoints);\n  },\n  _decodeHtml: function _decodeHtml(html) {\n    var txt = document.createElement('textarea');\n    txt.innerHTML = html;\n    return txt.value;\n  }\n};\nvar _default = controlPoints;\nexports.default = _default;\n\n},{\"../utils/storage\":39}],34:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _storage = _interopRequireDefault(require(\"../utils/storage\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar entrepreneurs = {\n  entrepreneursKey: 'entrepreneurs',\n  entrepreneurs: [],\n  init: function init() {\n    if (!window.controlPlanConfig) {\n      return;\n    }\n\n    this.entrepreneurs = _storage.default.get(this.entrepreneursKey);\n\n    this._renderEntrepreneurs();\n  },\n  _initEntrepreneursEvents: function _initEntrepreneursEvents() {\n    var entrepreneursContainer = $('[data-entrepreneurs]');\n\n    if (!entrepreneursContainer) {\n      return;\n    }\n\n    var self = this;\n    entrepreneursContainer.find('[data-form-action=button]').on('click', function (e) {\n      e.preventDefault();\n      var form = $(e.currentTarget).closest('form');\n      var identifier = form.data('edit-identifier');\n      form.data('edit-identifier', null);\n\n      if (identifier) {\n        var entrepreneur = self._getEntrepreneur(identifier);\n\n        Object.keys(entrepreneur).forEach(function (key) {\n          var elem = form.find('[data-reference=' + key + ']');\n\n          if (elem.length) {\n            entrepreneur[key] = elem.val();\n          }\n        });\n      } else {\n        self.entrepreneurs.push({\n          Identifier: window.controlPlanConfig.newEntrepreneurIdentifier,\n          Name: form.find('[data-reference=Name]').val(),\n          Ssn: form.find('[data-reference=Ssn]').val(),\n          Role: form.find('[data-reference=Role]').val(),\n          SupervisorName: form.find('[data-reference=SupervisorName]').val(),\n          Phone: form.find('[data-reference=Phone]').val(),\n          Visible: true\n        });\n      }\n\n      _storage.default.set(self.entrepreneursKey, self.entrepreneurs);\n\n      self._renderEntrepreneurs();\n    });\n    entrepreneursContainer.find('[data-entrepreneur-remove]').on('click', function (e) {\n      var identifier = $(e.currentTarget).closest('div[data-entrepreneur]').data('entrepreneur');\n\n      if (!identifier) {\n        return;\n      }\n\n      var entrepreneur = self._getEntrepreneur(identifier);\n\n      if (entrepreneur) {\n        self.entrepreneurs = self.entrepreneurs.filter(function (entrepreneur) {\n          return entrepreneur.Identifier != identifier;\n        });\n\n        _storage.default.set(self.entrepreneursKey, self.entrepreneurs);\n\n        self._renderEntrepreneurs();\n      }\n    });\n    entrepreneursContainer.find('[data-entrepreneur-edit]').on('click', function (e) {\n      var identifier = $(e.currentTarget).closest('div[data-entrepreneur]').data('entrepreneur');\n\n      if (!identifier) {\n        return;\n      }\n\n      var entrepreneur = self._getEntrepreneur(identifier);\n\n      if (!entrepreneur) {\n        return;\n      }\n\n      var form = $('[data-entrepreneur=' + entrepreneur.Identifier + ']').siblings('form');\n\n      if (!form.length) {\n        return;\n      }\n\n      Object.keys(entrepreneur).forEach(function (key) {\n        form.find('[data-reference=' + key + ']').val(self._decodeHtml(entrepreneur[key]));\n      });\n      form.find('[data-form-action=button]').html(window.controlPlanConfig.saveEntrepreneurText);\n      form.data('edit-identifier', identifier);\n    });\n  },\n  _getEntrepreneur: function _getEntrepreneur(identifier) {\n    for (var i = 0; i < this.entrepreneurs.length; i++) {\n      var entrepreneur = this.entrepreneurs[i];\n\n      if (entrepreneur.Identifier == identifier) {\n        return entrepreneur;\n      }\n    }\n\n    return null;\n  },\n  _renderEntrepreneurs: function _renderEntrepreneurs() {\n    var entrepreneursContainer = $('[data-entrepreneurs]');\n\n    if (!entrepreneursContainer.length) {\n      return;\n    }\n\n    var self = this;\n    $.ajax({\n      type: 'POST',\n      url: window.controlPlanConfig.entrepreneursUrl,\n      contentType: 'application/json',\n      data: JSON.stringify({\n        clientEntrepreneurs: this.entrepreneurs\n      }),\n      success: function success(data) {\n        if (!data) {\n          return;\n        }\n\n        entrepreneursContainer.html(data);\n\n        _storage.default.set(self.entrepreneursKey, window.controlPlanConfig.entrepreneurs);\n\n        self.entrepreneurs = window.controlPlanConfig.entrepreneurs;\n\n        self._initEntrepreneursEvents();\n      },\n      error: function error() {\n        entrepreneursContainer.html(window.controlPlanConfig.generalErrorText);\n      }\n    });\n  },\n  _decodeHtml: function _decodeHtml(html) {\n    var txt = document.createElement('textarea');\n    txt.innerHTML = html;\n    return txt.value;\n  }\n};\nvar _default = entrepreneurs;\nexports.default = _default;\n\n},{\"../utils/storage\":39}],35:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _storage = _interopRequireDefault(require(\"../utils/storage\"));\n\nvar _dynamicFormStorage = _interopRequireDefault(require(\"../utils/dynamic-form-storage\"));\n\nvar _controlpoints = _interopRequireDefault(require(\"./controlpoints\"));\n\nvar _entrepreneurs = _interopRequireDefault(require(\"./entrepreneurs\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar review = {\n  init: function init() {\n    var reviewContainers = $(document).find('div[data-review]');\n\n    if (!reviewContainers.length) {\n      return;\n    }\n\n    var self = this;\n    reviewContainers.each(function (_, container) {\n      var type = $(container).data('review');\n\n      self._renderReview($(container), type);\n    });\n  },\n  _renderReview: function _renderReview(container, type) {\n    var controlPointsItems = _storage.default.get(_controlpoints.default.controlPointsKey);\n\n    var controlPlanKey = _storage.default.get(_controlpoints.default.controlPlanKey);\n\n    var entrepreneursItems = _storage.default.get(_entrepreneurs.default.entrepreneursKey);\n\n    var formValues = _storage.default.get(_dynamicFormStorage.default.dynamicFormKey);\n\n    $.ajax({\n      type: 'POST',\n      url: window.controlPlanConfig.reviewUrl,\n      contentType: 'application/json',\n      data: JSON.stringify({\n        controlPoints: controlPointsItems,\n        selectedPlan: controlPlanKey,\n        formValues: formValues,\n        entrepreneurs: entrepreneursItems,\n        print: type == 'print'\n      }),\n      success: function success(data) {\n        if (!data) {\n          return;\n        }\n\n        container.html(data);\n      },\n      error: function error() {\n        container.html(window.controlPlanConfig.generalErrorText);\n      }\n    });\n  }\n};\nvar _default = review;\nexports.default = _default;\n\n},{\"../utils/dynamic-form-storage\":37,\"../utils/storage\":39,\"./controlpoints\":33,\"./entrepreneurs\":34}],36:[function(require,module,exports){\n\"use strict\";\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*!\r\n * FC Instagram - Development FCV Team\r\n * Website: https://foodconnection.vn\r\n * Since: 2019-11\r\n * Version: v2.0.0\r\n * Document Instagram Basic Display API: https://developers.facebook.com/docs/instagram-basic-display-api\r\n */\nvar FCInstagram = window.FCInstagram || {};\nFCInstagram.name = 'FC Instagram';\nFCInstagram.version = '2.0.0'; // Info\n\nconsole.info('%c ' + FCInstagram.name + ' %c v' + FCInstagram.version + ' %c', 'margin-left: 5px; padding: 1px; color: #FEFEFE; font-size: 12px; line-height: 15px; background: #F79433; border-radius: 3px 0 0 3px;', 'padding: 1px; color: #FEFEFE; font-size: 12px; line-height: 15px; background: #FF5722; border-radius: 0 3px 3px 0;', 'background: transparent;'); // Utility for older browsers\n\nif (typeof Object.create !== 'function') {\n  Object.create = function (obj) {\n    function F() {}\n\n    F.prototype = obj;\n    return new F();\n  };\n}\n\n(function (window, document, undefined) {\n  var Instagram = {\n    API_URL: 'https://graph.instagram.com/me/media?fields=',\n    API_FIELDS: 'caption,media_url,media_type,permalink,timestamp,username',\n\n    /**\r\n     * Initializes the plugin.\r\n     * @param {object} options\r\n     * @param {jQuery Object} elem\r\n     */\n    initialize: function initialize(options, elem) {\n      this.elem = elem;\n      this.$elem = (0, _jquery.default)(elem);\n      this.accessToken = _jquery.default.fn.FCInstagram.accessData.accessToken, this.options = _jquery.default.extend({}, _jquery.default.fn.FCInstagram.options, options);\n      this.messages = {\n        defaultImageAltText: 'Instagram-bild',\n        notFound: 'This user account is private or doesn\\'t have any photos.'\n      };\n      this.getPhotos();\n    },\n\n    /**\r\n     * Calls the fetch function and work with the response.\r\n     */\n    getPhotos: function getPhotos() {\n      var self = this; //   messages = null;\n\n      self.fetch().done(function (results) {\n        if (results.data) {\n          self.displayPhotos(results);\n        } else if (results.error.message) {\n          _jquery.default.error('FCInstagram.js - Error: ' + results.error.message);\n        } else {\n          _jquery.default.error('FCInstagram.js - Error: user does not have photos.');\n        }\n      });\n    },\n\n    /**\r\n     * Makes the ajax call and returns the result.\r\n     */\n    fetch: function fetch() {\n      var getUrl = this.API_URL + this.API_FIELDS + '&access_token=' + this.accessToken;\n      return _jquery.default.ajax({\n        type: 'GET',\n        dataType: 'jsonp',\n        cache: false,\n        url: getUrl\n      });\n    },\n    getCaption: function getCaption(caption) {\n      var hasCaption = caption !== null || caption !== undefined;\n      return hasCaption ? (0, _jquery.default)('<span>').text(caption).html() : this.messages.defaultImageAltText;\n    },\n\n    /**\r\n     * Appends the markup to the DOM with the images.\r\n     * @param {object} results\r\n     */\n    displayPhotos: function displayPhotos(results) {\n      var $element,\n          $source,\n          $video,\n          $link,\n          $img,\n          $caption,\n          $mediaWrapper,\n          imageGroup = [],\n          imageCaption,\n          linkTitle,\n          autoplay,\n          max;\n      max = this.options.max >= results.data.length ? results.data.length : this.options.max;\n\n      if (results.data === undefined || results.data.length === 0) {\n        this.$elem.append(this.messages.notFound);\n        return;\n      }\n\n      for (var i = 0; i < max; i++) {\n        linkTitle = 'Gå till inlägg ' + (i + 1) + ' på instagram';\n\n        if (results.data[i].media_type === 'IMAGE' || results.data[i].media_type === 'CAROUSEL_ALBUM') {\n          imageCaption = this.getCaption(results.data[i].caption);\n          $img = (0, _jquery.default)('<img>', {\n            src: results.data[i].media_url,\n            class: 'c-instagram-feed__image',\n            alt: imageCaption\n          });\n          $mediaWrapper = (0, _jquery.default)('<div>', {\n            class: 'c-instagram-feed__media-wrapper'\n          }).append($img);\n          $caption = (0, _jquery.default)('<p>', {\n            class: 'c-instagram-feed__caption'\n          });\n          $caption.text(imageCaption);\n          $link = (0, _jquery.default)('<a>', {\n            href: results.data[i].permalink,\n            target: '_blank',\n            rel: 'nofollow',\n            class: 'c-instagram-feed__link',\n            title: linkTitle\n          }).append($mediaWrapper);\n          $element = (0, _jquery.default)('<div>', {\n            class: 'c-instagram-feed__item'\n          }).append($link).append($caption); // Add item\n\n          imageGroup.push($element);\n        } else if (results.data[i].media_type === 'VIDEO') {\n          imageCaption = this.getCaption(results.data[i].caption);\n          autoplay = this.options.autoplay == true ? 'autoplay muted loop playsinline' : '';\n          $source = (0, _jquery.default)('<source>', {\n            src: results.data[i].media_url,\n            type: 'video/mp4'\n          });\n          $video = (0, _jquery.default)('<video ' + autoplay + '>', {\n            src: results.data[i].media_url,\n            class: 'c-instagram-feed__video'\n          }).append($source);\n          $mediaWrapper = (0, _jquery.default)('<div>', {\n            class: 'c-instagram-feed__media-wrapper'\n          }).append($video);\n          $caption = (0, _jquery.default)('<p>', {\n            class: 'c-instagram-feed__caption'\n          });\n          $caption.text(imageCaption);\n          $link = (0, _jquery.default)('<a>', {\n            href: results.data[i].permalink,\n            target: '_blank',\n            rel: 'nofollow',\n            class: 'c-instagram-feed__link',\n            title: linkTitle\n          }).append($mediaWrapper);\n          $element = (0, _jquery.default)('<div>', {\n            class: 'c-instagram-feed__item'\n          }).append($link).append($caption); // Add item\n\n          imageGroup.push($element);\n        }\n      }\n\n      this.$elem.append(imageGroup);\n\n      if (typeof this.options.complete === 'function') {\n        this.options.complete.call(this);\n      }\n    }\n  };\n  /**\r\n   * FCInstagram Plugin Definition.\r\n   */\n\n  _jquery.default.fn.FCInstagram = function (options) {\n    if (_jquery.default.fn.FCInstagram.accessData.accessToken) {\n      this.each(function () {\n        var instagram = Object.create(Instagram);\n        instagram.initialize(options, this);\n      });\n    } else {\n      _jquery.default.error('You must define an accessToken on jQuery.FCInstagram');\n    }\n  }; // Plugin Default Options.\n\n\n  _jquery.default.fn.FCInstagram.options = {\n    complete: null,\n    max: 9,\n    autoplay: false\n  }; // Instagram Access Data.\n\n  _jquery.default.fn.FCInstagram.accessData = {\n    accessToken: null\n  };\n})(window, document);\n\n},{\"jquery\":44}],37:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _storage = _interopRequireDefault(require(\"./storage\"));\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar dynamicFormStorage = {\n  dynamicFormKey: 'dynamicForm',\n  init: function init() {\n    var self = this;\n    this.data = _storage.default.get(this.dynamicFormKey);\n\n    if (!this.data) {\n      this.data = {};\n    }\n\n    (0, _jquery.default)('[data-identifier]').each(function (index, element) {\n      self._restoreElementValue(element);\n\n      (0, _jquery.default)(element).change(function (e) {\n        self._saveElementValue(e);\n      });\n    });\n  },\n  removeStoreData: function removeStoreData() {\n    var self = this;\n    (0, _jquery.default)('[data-identifier]').each(function (index, element) {\n      self._removeElementValue(element);\n    });\n  },\n  _restoreElementValue: function _restoreElementValue(element) {\n    var identifier = (0, _jquery.default)(element).data('identifier');\n\n    if (!identifier || !this.data[identifier]) {\n      return;\n    }\n\n    var storedValue = this.data[identifier];\n\n    if ((0, _jquery.default)(element).attr('type') == 'checkbox') {\n      (0, _jquery.default)(element).attr('checked', storedValue.value);\n      return;\n    }\n\n    (0, _jquery.default)(element).val(storedValue.value);\n  },\n  _saveElementValue: function _saveElementValue(e) {\n    var element = (0, _jquery.default)(e.currentTarget);\n    var identifier = element.data('identifier');\n\n    if (!identifier) {\n      return;\n    }\n\n    var value = element.attr('type') == 'checkbox' ? element.is(':checked') : element.val();\n    this.data[identifier] = {\n      value: value\n    };\n\n    _storage.default.set(this.dynamicFormKey, this.data);\n  },\n  _removeElementValue: function _removeElementValue(element) {\n    var identifier = (0, _jquery.default)(element).data('identifier');\n\n    if (!identifier || !this.data[identifier]) {\n      return;\n    }\n\n    this.data[identifier] = {\n      value: ''\n    };\n    console.log('storage set', this.dynamicFormKey, this.data);\n\n    _storage.default.set(this.dynamicFormKey, this.data);\n  }\n};\nvar _default = dynamicFormStorage;\nexports.default = _default;\n\n},{\"./storage\":39,\"jquery\":44}],38:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nvar _dynamicFormStorage = _interopRequireDefault(require(\"./dynamic-form-storage\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar dynamicForm = {\n  init: function init() {\n    (0, _jquery.default)('[data-form-action=\"submit\"]').closest('form').on('submit', this.onFormSubmit);\n    (0, _jquery.default)('form input, form textarea').on('input', function () {\n      var $this = (0, _jquery.default)(this);\n\n      if ($this.hasClass('validationerror')) {\n        $this.removeClass('validationerror');\n      }\n    });\n    (0, _jquery.default)('form select').on('change', function () {\n      var $this = (0, _jquery.default)(this);\n\n      if ($this.hasClass('validationerror')) {\n        $this.removeClass('validationerror');\n      }\n    });\n  },\n  onFormSubmit: function onFormSubmit(e) {\n    e.preventDefault();\n    var form = (0, _jquery.default)(this);\n    var formbody = form.find('[data-form-body]');\n    var successContainer = form.find('[data-success-message]');\n    var errorContainer = form.find('[data-error-message]');\n    var successText = form.find('[data-success-text]');\n    var errorHeading = form.find('[data-error-heading]');\n    var errorText = form.find('[data-error-text]');\n    var formData = new FormData(form.get(0));\n\n    _jquery.default.ajax({\n      method: 'POST',\n      url: window.dynamicFormConfig.url,\n      data: formData,\n      processData: false,\n      contentType: false,\n      beforeSend: function beforeSend() {\n        errorContainer.hide();\n        successContainer.hide();\n      },\n      success: function success(data) {\n        if (data.Error) {\n          console.log('messages: ', data.Messages);\n\n          if (data.Messages) {\n            var errorhtml = '';\n\n            for (var key in data.Messages) {\n              var value = data.Messages[key];\n              var element = form.find('#' + key);\n\n              if (element) {\n                element.addClass('validationerror');\n              }\n\n              errorhtml += '<div><a class=\"erroranchor\" href=\"#' + key + '\"><span class=\"fas fa-times-circle\" aria-hidden=\"true\"></span>' + value + '</a></div>';\n            }\n\n            errorHeading.text(data.Heading);\n            errorText.html(errorhtml);\n          } else {\n            errorText.html(data.Message);\n          }\n\n          errorContainer.show();\n          errorContainer.focus();\n          setTimeout(function () {\n            errorContainer[0].scrollIntoView({\n              behavior: 'smooth',\n              block: 'center'\n            });\n          }, 200);\n        } else {\n          successText.html(data.Message);\n\n          _dynamicFormStorage.default.removeStoreData();\n\n          formbody.hide();\n          successContainer.show();\n          successContainer.focus();\n          setTimeout(function () {\n            successContainer[0].scrollIntoView({\n              behavior: 'smooth',\n              block: 'center'\n            });\n          }, 200);\n        }\n      },\n      error: function error() {\n        errorContainer.prepend('<span class=\"c-dynamic-form__icon c-dynamic-form__icon--error\"><span class=\"fas fa-times-circle\" aria-hidden=\"true\"></span></span>');\n        errorText.html(window.dynamicFormConfig.genericError);\n        errorContainer.show();\n      }\n    });\n  }\n};\nvar _default = dynamicForm;\nexports.default = _default;\n\n},{\"./dynamic-form-storage\":37,\"jquery\":44}],39:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar storage = {\n  dataKey: 'sollentuna-local-storage',\n  init: function init() {\n    this._readFromStorage();\n  },\n  set: function set(key, obj) {\n    this.data[key] = JSON.stringify(obj);\n\n    this._saveToStorage();\n  },\n  get: function get(key) {\n    if (this.hasKey(key)) {\n      return JSON.parse(this.data[key]);\n    }\n\n    return null;\n  },\n  hasKey: function hasKey(key) {\n    if (!this.data[key]) {\n      return false;\n    }\n\n    return true;\n  },\n  keys: function keys() {\n    Object.keys(this.data);\n  },\n  _readFromStorage: function _readFromStorage() {\n    var data = localStorage.getItem(this.dataKey);\n\n    if (data) {\n      this.data = JSON.parse(data);\n    } else {\n      this.data = {};\n    }\n  },\n  _clearStorage: function _clearStorage() {\n    localStorage.removeItem(this.dataKey);\n\n    this._readFromStorage();\n  },\n  _saveToStorage: function _saveToStorage() {\n    localStorage.setItem(this.dataKey, JSON.stringify(this.data));\n  }\n};\nvar _default = storage;\nexports.default = _default;\n\n},{}],40:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar pageEvent = {\n  SessionStorageURLParameters: 'CalendarURL',\n  init: function init() {\n    (0, _jquery.default)('.p-event .c-go-back').on('click', function (e) {\n      if (sessionStorage.getItem('CalendarURL') != null) {\n        e.preventDefault();\n        window.location.href = sessionStorage.getItem(pageEvent.SessionStorageURLParameters);\n      }\n    });\n  }\n};\nvar _default = pageEvent;\nexports.default = _default;\n\n},{\"jquery\":44}],41:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar pageJobs = {\n  elemJobs: '.p-jobs',\n  elemJobsList: '.c-jobs__content',\n  elemJobsListItem: '.c-jobs__content tr',\n  elemJobSortSelect: '#jobs-select-id',\n  elemJobTitle: '.c-jobs__title span',\n  elemJobPublishDate: '.c-jobs__published time',\n  elemJobEndDate: '.c-jobs__end time',\n  sortAsc: function sortAsc(valueSelector) {\n    return function (a, b) {\n      var aText = (0, _jquery.default)(valueSelector, a).text().trim(),\n          bText = (0, _jquery.default)(valueSelector, b).text().trim();\n      return aText < bText ? -1 : aText > bText ? 1 : 0;\n    };\n  },\n  sortDesc: function sortDesc(valueSelector) {\n    return function (a, b) {\n      var aDate = (0, _jquery.default)(valueSelector, a).attr('datetime'),\n          bDate = (0, _jquery.default)(valueSelector, b).attr('datetime');\n      return new Date(bDate) - new Date(aDate);\n    };\n  },\n  sortListAsc: function sortListAsc(listItems, valueSelector) {\n    listItems.sort(this.sortAsc(valueSelector));\n    listItems.appendTo(this.elemJobsList);\n  },\n  sortListDesc: function sortListDesc(listItems, valueSelector) {\n    listItems.sort(this.sortDesc(valueSelector));\n    listItems.appendTo(this.elemJobsList);\n  },\n  init: function init() {\n    var $elemJobSortSelect = (0, _jquery.default)(this.elemJobSortSelect),\n        $elemJobListItem = (0, _jquery.default)(this.elemJobsListItem);\n    $elemJobSortSelect.on('change', function (e) {\n      e.preventDefault();\n      var currentSelection = (0, _jquery.default)(this).val();\n\n      switch (currentSelection) {\n        case 'title':\n          pageJobs.sortListAsc($elemJobListItem, pageJobs.elemJobTitle);\n          break;\n\n        case 'publish':\n          pageJobs.sortListDesc($elemJobListItem, pageJobs.elemJobPublishDate);\n          break;\n\n        case 'enddate':\n          pageJobs.sortListAsc($elemJobListItem, pageJobs.elemJobEndDate);\n          break;\n      }\n    });\n  }\n};\nvar _default = pageJobs;\nexports.default = _default;\n\n},{\"jquery\":44}],42:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jquery = _interopRequireDefault(require(\"jquery\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar pageSearch = {\n  elemSearchResultList: '.c-icon-list--search-results .c-icon-list__list',\n  elemSearchResultListItem: '.c-icon-list--search-results .c-icon-list-item',\n  elemSearchPaginationButton: '.c-icon-list--search-results .c-icon-list__button.c-button--plus',\n  elemSearchResultSummary: '.c-search-filter__outer .c-search-filter__total',\n  elemSearchFilterSelection: '.p-search .c-select-bar__select',\n  updateQueryStringParam: function updateQueryStringParam(key, value) {\n    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),\n        urlQueryString = document.location.search,\n        newParam = key + '=' + value,\n        params = '?' + newParam;\n\n    if (urlQueryString) {\n      var keyRegex = new RegExp('([?&])' + key + '[^&]*');\n\n      if (urlQueryString.match(keyRegex) !== null) {\n        params = urlQueryString.replace(keyRegex, '$1' + newParam);\n      } else {\n        params = urlQueryString + '&' + newParam;\n      }\n    }\n\n    return baseUrl + params;\n  },\n  init: function init() {\n    var $elemSearchResultList = (0, _jquery.default)(this.elemSearchResultList);\n    var $elemSearchPaginationButton = (0, _jquery.default)(this.elemSearchPaginationButton);\n    var $elemSearchResultSummary = (0, _jquery.default)(this.elemSearchResultSummary);\n    var $elemSearchFilterSelection = (0, _jquery.default)(this.elemSearchFilterSelection);\n    var $currentPageNumber = 1;\n    $elemSearchFilterSelection.on('change', function (e) {\n      e.preventDefault();\n      window.location.href = pageSearch.updateQueryStringParam('category', $elemSearchFilterSelection.val());\n    });\n    $elemSearchPaginationButton.on('click', function (e) {\n      e.preventDefault();\n      $currentPageNumber++;\n      var ajaxUrl = window.location.href + '&page=' + $currentPageNumber;\n\n      _jquery.default.get(ajaxUrl, function (data) {\n        $elemSearchResultList.append(data);\n      }).done(function () {\n        // update result summary\n        $elemSearchResultSummary.html(window.searchPageConfig.resultSummaryString.replace('X', (0, _jquery.default)(pageSearch.elemSearchResultListItem).length));\n\n        if ((0, _jquery.default)(pageSearch.elemSearchResultListItem).length == window.searchPageConfig.totalResults) {\n          $elemSearchPaginationButton.hide();\n        }\n      });\n    });\n  }\n};\nvar _default = pageSearch;\nexports.default = _default;\n\n},{\"jquery\":44}],43:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n(function webpackUniversalModuleDefinition(root, factory) {\n  if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof2(exports)) === 'object' && (typeof module === \"undefined\" ? \"undefined\" : _typeof2(module)) === 'object') module.exports = factory(require(\"jquery\"));else if (typeof define === 'function' && define.amd) define([\"jquery\"], factory);else {\n    var a = (typeof exports === \"undefined\" ? \"undefined\" : _typeof2(exports)) === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\n    for (var i in a) {\n      ((typeof exports === \"undefined\" ? \"undefined\" : _typeof2(exports)) === 'object' ? exports : root)[i] = a[i];\n    }\n  }\n})(window, function (__WEBPACK_EXTERNAL_MODULE_jquery__) {\n  return (\n    /******/\n    function (modules) {\n      // webpackBootstrap\n\n      /******/\n      // The module cache\n\n      /******/\n      var installedModules = {};\n      /******/\n\n      /******/\n      // The require function\n\n      /******/\n\n      function __webpack_require__(moduleId) {\n        /******/\n\n        /******/\n        // Check if module is in cache\n\n        /******/\n        if (installedModules[moduleId]) {\n          /******/\n          return installedModules[moduleId].exports;\n          /******/\n        }\n        /******/\n        // Create a new module (and put it into the cache)\n\n        /******/\n\n\n        var module = installedModules[moduleId] = {\n          /******/\n          i: moduleId,\n\n          /******/\n          l: false,\n\n          /******/\n          exports: {}\n          /******/\n\n        };\n        /******/\n\n        /******/\n        // Execute the module function\n\n        /******/\n\n        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n        /******/\n\n        /******/\n        // Flag the module as loaded\n\n        /******/\n\n        module.l = true;\n        /******/\n\n        /******/\n        // Return the exports of the module\n\n        /******/\n\n        return module.exports;\n        /******/\n      }\n      /******/\n\n      /******/\n\n      /******/\n      // expose the modules object (__webpack_modules__)\n\n      /******/\n\n\n      __webpack_require__.m = modules;\n      /******/\n\n      /******/\n      // expose the module cache\n\n      /******/\n\n      __webpack_require__.c = installedModules;\n      /******/\n\n      /******/\n      // define getter function for harmony exports\n\n      /******/\n\n      __webpack_require__.d = function (exports, name, getter) {\n        /******/\n        if (!__webpack_require__.o(exports, name)) {\n          /******/\n          Object.defineProperty(exports, name, {\n            enumerable: true,\n            get: getter\n          });\n          /******/\n        }\n        /******/\n\n      };\n      /******/\n\n      /******/\n      // define __esModule on exports\n\n      /******/\n\n\n      __webpack_require__.r = function (exports) {\n        /******/\n        if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n          /******/\n          Object.defineProperty(exports, Symbol.toStringTag, {\n            value: 'Module'\n          });\n          /******/\n        }\n        /******/\n\n\n        Object.defineProperty(exports, '__esModule', {\n          value: true\n        });\n        /******/\n      };\n      /******/\n\n      /******/\n      // create a fake namespace object\n\n      /******/\n      // mode & 1: value is a module id, require it\n\n      /******/\n      // mode & 2: merge all properties of value into the ns\n\n      /******/\n      // mode & 4: return value when already ns object\n\n      /******/\n      // mode & 8|1: behave like require\n\n      /******/\n\n\n      __webpack_require__.t = function (value, mode) {\n        /******/\n        if (mode & 1) value = __webpack_require__(value);\n        /******/\n\n        if (mode & 8) return value;\n        /******/\n\n        if (mode & 4 && _typeof2(value) === 'object' && value && value.__esModule) return value;\n        /******/\n\n        var ns = Object.create(null);\n        /******/\n\n        __webpack_require__.r(ns);\n        /******/\n\n\n        Object.defineProperty(ns, 'default', {\n          enumerable: true,\n          value: value\n        });\n        /******/\n\n        if (mode & 2 && typeof value != 'string') for (var key in value) {\n          __webpack_require__.d(ns, key, function (key) {\n            return value[key];\n          }.bind(null, key));\n        }\n        /******/\n\n        return ns;\n        /******/\n      };\n      /******/\n\n      /******/\n      // getDefaultExport function for compatibility with non-harmony modules\n\n      /******/\n\n\n      __webpack_require__.n = function (module) {\n        /******/\n        var getter = module && module.__esModule ?\n        /******/\n        function getDefault() {\n          return module['default'];\n        } :\n        /******/\n        function getModuleExports() {\n          return module;\n        };\n        /******/\n\n        __webpack_require__.d(getter, 'a', getter);\n        /******/\n\n\n        return getter;\n        /******/\n      };\n      /******/\n\n      /******/\n      // Object.prototype.hasOwnProperty.call\n\n      /******/\n\n\n      __webpack_require__.o = function (object, property) {\n        return Object.prototype.hasOwnProperty.call(object, property);\n      };\n      /******/\n\n      /******/\n      // __webpack_public_path__\n\n      /******/\n\n\n      __webpack_require__.p = \"\";\n      /******/\n\n      /******/\n\n      /******/\n      // Load entry module and return exports\n\n      /******/\n\n      return __webpack_require__(__webpack_require__.s = 0);\n      /******/\n    }(\n    /************************************************************************/\n\n    /******/\n    {\n      /***/\n      \"./js/entries/foundation.js\":\n      /*!**********************************!*\\\n        !*** ./js/entries/foundation.js ***!\n        \\**********************************/\n\n      /*! exports provided: Foundation, CoreUtils, Box, onImagesLoaded, Keyboard, MediaQuery, Motion, Nest, Timer, Touch, Triggers, Abide, Accordion, AccordionMenu, Drilldown, Dropdown, DropdownMenu, Equalizer, Interchange, Magellan, OffCanvas, Orbit, ResponsiveMenu, ResponsiveToggle, Reveal, Slider, SmoothScroll, Sticky, Tabs, Toggler, Tooltip, ResponsiveAccordionTabs, default */\n\n      /***/\n      function jsEntriesFoundationJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ../foundation.core */\n        \"./js/foundation.core.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Foundation\", function () {\n          return _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ../foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony reexport (module object) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"CoreUtils\", function () {\n          return _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__;\n        });\n        /* harmony import */\n\n\n        var _foundation_util_box__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ../foundation.util.box */\n        \"./js/foundation.util.box.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Box\", function () {\n          return _foundation_util_box__WEBPACK_IMPORTED_MODULE_3__[\"Box\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ../foundation.util.imageLoader */\n        \"./js/foundation.util.imageLoader.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"onImagesLoaded\", function () {\n          return _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__[\"onImagesLoaded\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ../foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Keyboard\", function () {\n          return _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_5__[\"Keyboard\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n        /*! ../foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"MediaQuery\", function () {\n          return _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__[\"MediaQuery\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\n        /*! ../foundation.util.motion */\n        \"./js/foundation.util.motion.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Motion\", function () {\n          return _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__[\"Motion\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(\n        /*! ../foundation.util.nest */\n        \"./js/foundation.util.nest.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Nest\", function () {\n          return _foundation_util_nest__WEBPACK_IMPORTED_MODULE_8__[\"Nest\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_timer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(\n        /*! ../foundation.util.timer */\n        \"./js/foundation.util.timer.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Timer\", function () {\n          return _foundation_util_timer__WEBPACK_IMPORTED_MODULE_9__[\"Timer\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(\n        /*! ../foundation.util.touch */\n        \"./js/foundation.util.touch.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Touch\", function () {\n          return _foundation_util_touch__WEBPACK_IMPORTED_MODULE_10__[\"Touch\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(\n        /*! ../foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Triggers\", function () {\n          return _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_11__[\"Triggers\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_abide__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(\n        /*! ../foundation.abide */\n        \"./js/foundation.abide.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Abide\", function () {\n          return _foundation_abide__WEBPACK_IMPORTED_MODULE_12__[\"Abide\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_accordion__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(\n        /*! ../foundation.accordion */\n        \"./js/foundation.accordion.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Accordion\", function () {\n          return _foundation_accordion__WEBPACK_IMPORTED_MODULE_13__[\"Accordion\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(\n        /*! ../foundation.accordionMenu */\n        \"./js/foundation.accordionMenu.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"AccordionMenu\", function () {\n          return _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_14__[\"AccordionMenu\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_drilldown__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(\n        /*! ../foundation.drilldown */\n        \"./js/foundation.drilldown.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Drilldown\", function () {\n          return _foundation_drilldown__WEBPACK_IMPORTED_MODULE_15__[\"Drilldown\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_dropdown__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(\n        /*! ../foundation.dropdown */\n        \"./js/foundation.dropdown.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Dropdown\", function () {\n          return _foundation_dropdown__WEBPACK_IMPORTED_MODULE_16__[\"Dropdown\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(\n        /*! ../foundation.dropdownMenu */\n        \"./js/foundation.dropdownMenu.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"DropdownMenu\", function () {\n          return _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_17__[\"DropdownMenu\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_equalizer__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(\n        /*! ../foundation.equalizer */\n        \"./js/foundation.equalizer.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Equalizer\", function () {\n          return _foundation_equalizer__WEBPACK_IMPORTED_MODULE_18__[\"Equalizer\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_interchange__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(\n        /*! ../foundation.interchange */\n        \"./js/foundation.interchange.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Interchange\", function () {\n          return _foundation_interchange__WEBPACK_IMPORTED_MODULE_19__[\"Interchange\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_magellan__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(\n        /*! ../foundation.magellan */\n        \"./js/foundation.magellan.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Magellan\", function () {\n          return _foundation_magellan__WEBPACK_IMPORTED_MODULE_20__[\"Magellan\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_offcanvas__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(\n        /*! ../foundation.offcanvas */\n        \"./js/foundation.offcanvas.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"OffCanvas\", function () {\n          return _foundation_offcanvas__WEBPACK_IMPORTED_MODULE_21__[\"OffCanvas\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_orbit__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(\n        /*! ../foundation.orbit */\n        \"./js/foundation.orbit.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Orbit\", function () {\n          return _foundation_orbit__WEBPACK_IMPORTED_MODULE_22__[\"Orbit\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_responsiveMenu__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(\n        /*! ../foundation.responsiveMenu */\n        \"./js/foundation.responsiveMenu.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"ResponsiveMenu\", function () {\n          return _foundation_responsiveMenu__WEBPACK_IMPORTED_MODULE_23__[\"ResponsiveMenu\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_responsiveToggle__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(\n        /*! ../foundation.responsiveToggle */\n        \"./js/foundation.responsiveToggle.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"ResponsiveToggle\", function () {\n          return _foundation_responsiveToggle__WEBPACK_IMPORTED_MODULE_24__[\"ResponsiveToggle\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_reveal__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(\n        /*! ../foundation.reveal */\n        \"./js/foundation.reveal.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Reveal\", function () {\n          return _foundation_reveal__WEBPACK_IMPORTED_MODULE_25__[\"Reveal\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_slider__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(\n        /*! ../foundation.slider */\n        \"./js/foundation.slider.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Slider\", function () {\n          return _foundation_slider__WEBPACK_IMPORTED_MODULE_26__[\"Slider\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(\n        /*! ../foundation.smoothScroll */\n        \"./js/foundation.smoothScroll.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"SmoothScroll\", function () {\n          return _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_27__[\"SmoothScroll\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_sticky__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(\n        /*! ../foundation.sticky */\n        \"./js/foundation.sticky.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Sticky\", function () {\n          return _foundation_sticky__WEBPACK_IMPORTED_MODULE_28__[\"Sticky\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_tabs__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(\n        /*! ../foundation.tabs */\n        \"./js/foundation.tabs.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Tabs\", function () {\n          return _foundation_tabs__WEBPACK_IMPORTED_MODULE_29__[\"Tabs\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_toggler__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(\n        /*! ../foundation.toggler */\n        \"./js/foundation.toggler.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Toggler\", function () {\n          return _foundation_toggler__WEBPACK_IMPORTED_MODULE_30__[\"Toggler\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_tooltip__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(\n        /*! ../foundation.tooltip */\n        \"./js/foundation.tooltip.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Tooltip\", function () {\n          return _foundation_tooltip__WEBPACK_IMPORTED_MODULE_31__[\"Tooltip\"];\n        });\n        /* harmony import */\n\n\n        var _foundation_responsiveAccordionTabs__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(\n        /*! ../foundation.responsiveAccordionTabs */\n        \"./js/foundation.responsiveAccordionTabs.js\");\n        /* harmony reexport (safe) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"ResponsiveAccordionTabs\", function () {\n          return _foundation_responsiveAccordionTabs__WEBPACK_IMPORTED_MODULE_32__[\"ResponsiveAccordionTabs\"];\n        });\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].addToJquery(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); // Add Foundation Utils to Foundation global namespace for backwards\n        // compatibility.\n\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].rtl = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"rtl\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].GetYoDigits = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"GetYoDigits\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].transitionend = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"transitionend\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].RegExpEscape = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"RegExpEscape\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].onLoad = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"onLoad\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].Box = _foundation_util_box__WEBPACK_IMPORTED_MODULE_3__[\"Box\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].onImagesLoaded = _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__[\"onImagesLoaded\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].Keyboard = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_5__[\"Keyboard\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].MediaQuery = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__[\"MediaQuery\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].Motion = _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__[\"Motion\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].Move = _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__[\"Move\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].Nest = _foundation_util_nest__WEBPACK_IMPORTED_MODULE_8__[\"Nest\"];\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].Timer = _foundation_util_timer__WEBPACK_IMPORTED_MODULE_9__[\"Timer\"]; // Touch and Triggers previously were almost purely sede effect driven,\n        // so no need to add it to Foundation, just init them.\n\n        _foundation_util_touch__WEBPACK_IMPORTED_MODULE_10__[\"Touch\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n        _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_11__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a, _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"]);\n\n        _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__[\"MediaQuery\"]._init();\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_abide__WEBPACK_IMPORTED_MODULE_12__[\"Abide\"], 'Abide');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_accordion__WEBPACK_IMPORTED_MODULE_13__[\"Accordion\"], 'Accordion');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_14__[\"AccordionMenu\"], 'AccordionMenu');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_drilldown__WEBPACK_IMPORTED_MODULE_15__[\"Drilldown\"], 'Drilldown');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_dropdown__WEBPACK_IMPORTED_MODULE_16__[\"Dropdown\"], 'Dropdown');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_17__[\"DropdownMenu\"], 'DropdownMenu');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_equalizer__WEBPACK_IMPORTED_MODULE_18__[\"Equalizer\"], 'Equalizer');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_interchange__WEBPACK_IMPORTED_MODULE_19__[\"Interchange\"], 'Interchange');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_magellan__WEBPACK_IMPORTED_MODULE_20__[\"Magellan\"], 'Magellan');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_offcanvas__WEBPACK_IMPORTED_MODULE_21__[\"OffCanvas\"], 'OffCanvas');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_orbit__WEBPACK_IMPORTED_MODULE_22__[\"Orbit\"], 'Orbit');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_responsiveMenu__WEBPACK_IMPORTED_MODULE_23__[\"ResponsiveMenu\"], 'ResponsiveMenu');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_responsiveToggle__WEBPACK_IMPORTED_MODULE_24__[\"ResponsiveToggle\"], 'ResponsiveToggle');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_reveal__WEBPACK_IMPORTED_MODULE_25__[\"Reveal\"], 'Reveal');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_slider__WEBPACK_IMPORTED_MODULE_26__[\"Slider\"], 'Slider');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_27__[\"SmoothScroll\"], 'SmoothScroll');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_sticky__WEBPACK_IMPORTED_MODULE_28__[\"Sticky\"], 'Sticky');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_tabs__WEBPACK_IMPORTED_MODULE_29__[\"Tabs\"], 'Tabs');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_toggler__WEBPACK_IMPORTED_MODULE_30__[\"Toggler\"], 'Toggler');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_tooltip__WEBPACK_IMPORTED_MODULE_31__[\"Tooltip\"], 'Tooltip');\n\n        _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"].plugin(_foundation_responsiveAccordionTabs__WEBPACK_IMPORTED_MODULE_32__[\"ResponsiveAccordionTabs\"], 'ResponsiveAccordionTabs');\n        /* harmony default export */\n\n\n        __webpack_exports__[\"default\"] = _foundation_core__WEBPACK_IMPORTED_MODULE_1__[\"Foundation\"];\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.abide.js\":\n      /*!********************************!*\\\n        !*** ./js/foundation.abide.js ***!\n        \\********************************/\n\n      /*! exports provided: Abide */\n\n      /***/\n      function jsFoundationAbideJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Abide\", function () {\n          return Abide;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Abide module.\n         * @module foundation.abide\n         */\n\n\n        var Abide =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Abide, _Plugin);\n\n          function Abide() {\n            _classCallCheck(this, Abide);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Abide).apply(this, arguments));\n          }\n\n          _createClass(Abide, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of Abide.\n             * @class\n             * @name Abide\n             * @fires Abide#init\n             * @param {Object} element - jQuery object to add the trigger to.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element) {\n              var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(true, {}, Abide.defaults, this.$element.data(), options);\n              this.className = 'Abide'; // ie9 back compat\n\n              this._init();\n            }\n            /**\n             * Initializes the Abide plugin and calls functions to get Abide functioning on load.\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var _this2 = this;\n\n              this.$inputs = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.merge( // Consider as input to validate:\n              this.$element.find('input').not('[type=submit]'), // * all input fields expect submit\n              this.$element.find('textarea, select') // * all textareas and select fields\n              );\n              var $globalErrors = this.$element.find('[data-abide-error]'); // Add a11y attributes to all fields\n\n              if (this.options.a11yAttributes) {\n                this.$inputs.each(function (i, input) {\n                  return _this2.addA11yAttributes(jquery__WEBPACK_IMPORTED_MODULE_0___default()(input));\n                });\n                $globalErrors.each(function (i, error) {\n                  return _this2.addGlobalErrorA11yAttributes(jquery__WEBPACK_IMPORTED_MODULE_0___default()(error));\n                });\n              }\n\n              this._events();\n            }\n            /**\n             * Initializes events for Abide.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this3 = this;\n\n              this.$element.off('.abide').on('reset.zf.abide', function () {\n                _this3.resetForm();\n              }).on('submit.zf.abide', function () {\n                return _this3.validateForm();\n              });\n\n              if (this.options.validateOn === 'fieldChange') {\n                this.$inputs.off('change.zf.abide').on('change.zf.abide', function (e) {\n                  _this3.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target));\n                });\n              }\n\n              if (this.options.liveValidate) {\n                this.$inputs.off('input.zf.abide').on('input.zf.abide', function (e) {\n                  _this3.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target));\n                });\n              }\n\n              if (this.options.validateOnBlur) {\n                this.$inputs.off('blur.zf.abide').on('blur.zf.abide', function (e) {\n                  _this3.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target));\n                });\n              }\n            }\n            /**\n             * Calls necessary functions to update Abide upon DOM change\n             * @private\n             */\n\n          }, {\n            key: \"_reflow\",\n            value: function _reflow() {\n              this._init();\n            }\n            /**\n             * Checks whether or not a form element has the required attribute and if it's checked or not\n             * @param {Object} element - jQuery object to check for required attribute\n             * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty\n             */\n\n          }, {\n            key: \"requiredCheck\",\n            value: function requiredCheck($el) {\n              if (!$el.attr('required')) return true;\n              var isGood = true;\n\n              switch ($el[0].type) {\n                case 'checkbox':\n                  isGood = $el[0].checked;\n                  break;\n\n                case 'select':\n                case 'select-one':\n                case 'select-multiple':\n                  var opt = $el.find('option:selected');\n                  if (!opt.length || !opt.val()) isGood = false;\n                  break;\n\n                default:\n                  if (!$el.val() || !$el.val().length) isGood = false;\n              }\n\n              return isGood;\n            }\n            /**\n             * Get:\n             * - Based on $el, the first element(s) corresponding to `formErrorSelector` in this order:\n             *   1. The element's direct sibling('s).\n             *   2. The element's parent's children.\n             * - Element(s) with the attribute `[data-form-error-for]` set with the element's id.\n             *\n             * This allows for multiple form errors per input, though if none are found, no form errors will be shown.\n             *\n             * @param {Object} $el - jQuery object to use as reference to find the form error selector.\n             * @returns {Object} jQuery object with the selector.\n             */\n\n          }, {\n            key: \"findFormError\",\n            value: function findFormError($el) {\n              var id = $el[0].id;\n              var $error = $el.siblings(this.options.formErrorSelector);\n\n              if (!$error.length) {\n                $error = $el.parent().find(this.options.formErrorSelector);\n              }\n\n              if (id) {\n                $error = $error.add(this.$element.find(\"[data-form-error-for=\\\"\".concat(id, \"\\\"]\")));\n              }\n\n              return $error;\n            }\n            /**\n             * Get the first element in this order:\n             * 2. The <label> with the attribute `[for=\"someInputId\"]`\n             * 3. The `.closest()` <label>\n             *\n             * @param {Object} $el - jQuery object to check for required attribute\n             * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty\n             */\n\n          }, {\n            key: \"findLabel\",\n            value: function findLabel($el) {\n              var id = $el[0].id;\n              var $label = this.$element.find(\"label[for=\\\"\".concat(id, \"\\\"]\"));\n\n              if (!$label.length) {\n                return $el.closest('label');\n              }\n\n              return $label;\n            }\n            /**\n             * Get the set of labels associated with a set of radio els in this order\n             * 2. The <label> with the attribute `[for=\"someInputId\"]`\n             * 3. The `.closest()` <label>\n             *\n             * @param {Object} $el - jQuery object to check for required attribute\n             * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty\n             */\n\n          }, {\n            key: \"findRadioLabels\",\n            value: function findRadioLabels($els) {\n              var _this4 = this;\n\n              var labels = $els.map(function (i, el) {\n                var id = el.id;\n\n                var $label = _this4.$element.find(\"label[for=\\\"\".concat(id, \"\\\"]\"));\n\n                if (!$label.length) {\n                  $label = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).closest('label');\n                }\n\n                return $label[0];\n              });\n              return jquery__WEBPACK_IMPORTED_MODULE_0___default()(labels);\n            }\n            /**\n             * Adds the CSS error class as specified by the Abide settings to the label, input, and the form\n             * @param {Object} $el - jQuery object to add the class to\n             */\n\n          }, {\n            key: \"addErrorClasses\",\n            value: function addErrorClasses($el) {\n              var $label = this.findLabel($el);\n              var $formError = this.findFormError($el);\n\n              if ($label.length) {\n                $label.addClass(this.options.labelErrorClass);\n              }\n\n              if ($formError.length) {\n                $formError.addClass(this.options.formErrorClass);\n              }\n\n              $el.addClass(this.options.inputErrorClass).attr({\n                'data-invalid': '',\n                'aria-invalid': true\n              });\n            }\n            /**\n             * Adds [for] and [role=alert] attributes to all form error targetting $el,\n             * and [aria-describedby] attribute to $el toward the first form error.\n             * @param {Object} $el - jQuery object\n             */\n\n          }, {\n            key: \"addA11yAttributes\",\n            value: function addA11yAttributes($el) {\n              var $errors = this.findFormError($el);\n              var $labels = $errors.filter('label');\n              var $error = $errors.first();\n              if (!$errors.length) return; // Set [aria-describedby] on the input toward the first form error if it is not set\n\n              if (typeof $el.attr('aria-describedby') === 'undefined') {\n                // Get the first error ID or create one\n                var errorId = $error.attr('id');\n\n                if (typeof errorId === 'undefined') {\n                  errorId = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"GetYoDigits\"])(6, 'abide-error');\n                  $error.attr('id', errorId);\n                }\n\n                ;\n                $el.attr('aria-describedby', errorId);\n              }\n\n              if ($labels.filter('[for]').length < $labels.length) {\n                // Get the input ID or create one\n                var elemId = $el.attr('id');\n\n                if (typeof elemId === 'undefined') {\n                  elemId = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"GetYoDigits\"])(6, 'abide-input');\n                  $el.attr('id', elemId);\n                }\n\n                ; // For each label targeting $el, set [for] if it is not set.\n\n                $labels.each(function (i, label) {\n                  var $label = jquery__WEBPACK_IMPORTED_MODULE_0___default()(label);\n                  if (typeof $label.attr('for') === 'undefined') $label.attr('for', elemId);\n                });\n              } // For each error targeting $el, set [role=alert] if it is not set.\n\n\n              $errors.each(function (i, label) {\n                var $label = jquery__WEBPACK_IMPORTED_MODULE_0___default()(label);\n                if (typeof $label.attr('role') === 'undefined') $label.attr('role', 'alert');\n              }).end();\n            }\n            /**\n             * Adds [aria-live] attribute to the given global form error $el.\n             * @param {Object} $el - jQuery object to add the attribute to\n             */\n\n          }, {\n            key: \"addGlobalErrorA11yAttributes\",\n            value: function addGlobalErrorA11yAttributes($el) {\n              if (typeof $el.attr('aria-live') === 'undefined') $el.attr('aria-live', this.options.a11yErrorLevel);\n            }\n            /**\n             * Remove CSS error classes etc from an entire radio button group\n             * @param {String} groupName - A string that specifies the name of a radio button group\n             *\n             */\n\n          }, {\n            key: \"removeRadioErrorClasses\",\n            value: function removeRadioErrorClasses(groupName) {\n              var $els = this.$element.find(\":radio[name=\\\"\".concat(groupName, \"\\\"]\"));\n              var $labels = this.findRadioLabels($els);\n              var $formErrors = this.findFormError($els);\n\n              if ($labels.length) {\n                $labels.removeClass(this.options.labelErrorClass);\n              }\n\n              if ($formErrors.length) {\n                $formErrors.removeClass(this.options.formErrorClass);\n              }\n\n              $els.removeClass(this.options.inputErrorClass).attr({\n                'data-invalid': null,\n                'aria-invalid': null\n              });\n            }\n            /**\n             * Removes CSS error class as specified by the Abide settings from the label, input, and the form\n             * @param {Object} $el - jQuery object to remove the class from\n             */\n\n          }, {\n            key: \"removeErrorClasses\",\n            value: function removeErrorClasses($el) {\n              // radios need to clear all of the els\n              if ($el[0].type == 'radio') {\n                return this.removeRadioErrorClasses($el.attr('name'));\n              }\n\n              var $label = this.findLabel($el);\n              var $formError = this.findFormError($el);\n\n              if ($label.length) {\n                $label.removeClass(this.options.labelErrorClass);\n              }\n\n              if ($formError.length) {\n                $formError.removeClass(this.options.formErrorClass);\n              }\n\n              $el.removeClass(this.options.inputErrorClass).attr({\n                'data-invalid': null,\n                'aria-invalid': null\n              });\n            }\n            /**\n             * Goes through a form to find inputs and proceeds to validate them in ways specific to their type.\n             * Ignores inputs with data-abide-ignore, type=\"hidden\" or disabled attributes set\n             * @fires Abide#invalid\n             * @fires Abide#valid\n             * @param {Object} element - jQuery object to validate, should be an HTML input\n             * @returns {Boolean} goodToGo - If the input is valid or not.\n             */\n\n          }, {\n            key: \"validateInput\",\n            value: function validateInput($el) {\n              var clearRequire = this.requiredCheck($el),\n                  validated = false,\n                  customValidator = true,\n                  validator = $el.attr('data-validator'),\n                  equalTo = true; // don't validate ignored inputs or hidden inputs or disabled inputs\n\n              if ($el.is('[data-abide-ignore]') || $el.is('[type=\"hidden\"]') || $el.is('[disabled]')) {\n                return true;\n              }\n\n              switch ($el[0].type) {\n                case 'radio':\n                  validated = this.validateRadio($el.attr('name'));\n                  break;\n\n                case 'checkbox':\n                  validated = clearRequire;\n                  break;\n\n                case 'select':\n                case 'select-one':\n                case 'select-multiple':\n                  validated = clearRequire;\n                  break;\n\n                default:\n                  validated = this.validateText($el);\n              }\n\n              if (validator) {\n                customValidator = this.matchValidation($el, validator, $el.attr('required'));\n              }\n\n              if ($el.attr('data-equalto')) {\n                equalTo = this.options.validators.equalTo($el);\n              }\n\n              var goodToGo = [clearRequire, validated, customValidator, equalTo].indexOf(false) === -1;\n              var message = (goodToGo ? 'valid' : 'invalid') + '.zf.abide';\n\n              if (goodToGo) {\n                // Re-validate inputs that depend on this one with equalto\n                var dependentElements = this.$element.find(\"[data-equalto=\\\"\".concat($el.attr('id'), \"\\\"]\"));\n\n                if (dependentElements.length) {\n                  var _this = this;\n\n                  dependentElements.each(function () {\n                    if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).val()) {\n                      _this.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));\n                    }\n                  });\n                }\n              }\n\n              this[goodToGo ? 'removeErrorClasses' : 'addErrorClasses']($el);\n              /**\n               * Fires when the input is done checking for validation. Event trigger is either `valid.zf.abide` or `invalid.zf.abide`\n               * Trigger includes the DOM element of the input.\n               * @event Abide#valid\n               * @event Abide#invalid\n               */\n\n              $el.trigger(message, [$el]);\n              return goodToGo;\n            }\n            /**\n             * Goes through a form and if there are any invalid inputs, it will display the form error element\n             * @returns {Boolean} noError - true if no errors were detected...\n             * @fires Abide#formvalid\n             * @fires Abide#forminvalid\n             */\n\n          }, {\n            key: \"validateForm\",\n            value: function validateForm() {\n              var _this5 = this;\n\n              var acc = [];\n\n              var _this = this;\n\n              this.$inputs.each(function () {\n                acc.push(_this.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)));\n              });\n              var noError = acc.indexOf(false) === -1;\n              this.$element.find('[data-abide-error]').each(function (i, elem) {\n                var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(elem); // Ensure a11y attributes are set\n\n                if (_this5.options.a11yAttributes) _this5.addGlobalErrorA11yAttributes($elem); // Show or hide the error\n\n                $elem.css('display', noError ? 'none' : 'block');\n              });\n              /**\n               * Fires when the form is finished validating. Event trigger is either `formvalid.zf.abide` or `forminvalid.zf.abide`.\n               * Trigger includes the element of the form.\n               * @event Abide#formvalid\n               * @event Abide#forminvalid\n               */\n\n              this.$element.trigger((noError ? 'formvalid' : 'forminvalid') + '.zf.abide', [this.$element]);\n              return noError;\n            }\n            /**\n             * Determines whether or a not a text input is valid based on the pattern specified in the attribute. If no matching pattern is found, returns true.\n             * @param {Object} $el - jQuery object to validate, should be a text input HTML element\n             * @param {String} pattern - string value of one of the RegEx patterns in Abide.options.patterns\n             * @returns {Boolean} Boolean value depends on whether or not the input value matches the pattern specified\n             */\n\n          }, {\n            key: \"validateText\",\n            value: function validateText($el, pattern) {\n              // A pattern can be passed to this function, or it will be infered from the input's \"pattern\" attribute, or it's \"type\" attribute\n              pattern = pattern || $el.attr('pattern') || $el.attr('type');\n              var inputText = $el.val();\n              var valid = false;\n\n              if (inputText.length) {\n                // If the pattern attribute on the element is in Abide's list of patterns, then test that regexp\n                if (this.options.patterns.hasOwnProperty(pattern)) {\n                  valid = this.options.patterns[pattern].test(inputText);\n                } // If the pattern name isn't also the type attribute of the field, then test it as a regexp\n                else if (pattern !== $el.attr('type')) {\n                    valid = new RegExp(pattern).test(inputText);\n                  } else {\n                    valid = true;\n                  }\n              } // An empty field is valid if it's not required\n              else if (!$el.prop('required')) {\n                  valid = true;\n                }\n\n              return valid;\n            }\n            /**\n             * Determines whether or a not a radio input is valid based on whether or not it is required and selected. Although the function targets a single `<input>`, it validates by checking the `required` and `checked` properties of all radio buttons in its group.\n             * @param {String} groupName - A string that specifies the name of a radio button group\n             * @returns {Boolean} Boolean value depends on whether or not at least one radio input has been selected (if it's required)\n             */\n\n          }, {\n            key: \"validateRadio\",\n            value: function validateRadio(groupName) {\n              // If at least one radio in the group has the `required` attribute, the group is considered required\n              // Per W3C spec, all radio buttons in a group should have `required`, but we're being nice\n              var $group = this.$element.find(\":radio[name=\\\"\".concat(groupName, \"\\\"]\"));\n              var valid = false,\n                  required = false; // For the group to be required, at least one radio needs to be required\n\n              $group.each(function (i, e) {\n                if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).attr('required')) {\n                  required = true;\n                }\n              });\n              if (!required) valid = true;\n\n              if (!valid) {\n                // For the group to be valid, at least one radio needs to be checked\n                $group.each(function (i, e) {\n                  if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).prop('checked')) {\n                    valid = true;\n                  }\n                });\n              }\n\n              ;\n              return valid;\n            }\n            /**\n             * Determines if a selected input passes a custom validation function. Multiple validations can be used, if passed to the element with `data-validator=\"foo bar baz\"` in a space separated listed.\n             * @param {Object} $el - jQuery input element.\n             * @param {String} validators - a string of function names matching functions in the Abide.options.validators object.\n             * @param {Boolean} required - self explanatory?\n             * @returns {Boolean} - true if validations passed.\n             */\n\n          }, {\n            key: \"matchValidation\",\n            value: function matchValidation($el, validators, required) {\n              var _this6 = this;\n\n              required = required ? true : false;\n              var clear = validators.split(' ').map(function (v) {\n                return _this6.options.validators[v]($el, required, $el.parent());\n              });\n              return clear.indexOf(false) === -1;\n            }\n            /**\n             * Resets form inputs and styles\n             * @fires Abide#formreset\n             */\n\n          }, {\n            key: \"resetForm\",\n            value: function resetForm() {\n              var $form = this.$element,\n                  opts = this.options;\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".\".concat(opts.labelErrorClass), $form).not('small').removeClass(opts.labelErrorClass);\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".\".concat(opts.inputErrorClass), $form).not('small').removeClass(opts.inputErrorClass);\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"\".concat(opts.formErrorSelector, \".\").concat(opts.formErrorClass)).removeClass(opts.formErrorClass);\n              $form.find('[data-abide-error]').css('display', 'none');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(':input', $form).not(':button, :submit, :reset, :hidden, :radio, :checkbox, [data-abide-ignore]').val('').attr({\n                'data-invalid': null,\n                'aria-invalid': null\n              });\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(':input:radio', $form).not('[data-abide-ignore]').prop('checked', false).attr({\n                'data-invalid': null,\n                'aria-invalid': null\n              });\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(':input:checkbox', $form).not('[data-abide-ignore]').prop('checked', false).attr({\n                'data-invalid': null,\n                'aria-invalid': null\n              });\n              /**\n               * Fires when the form has been reset.\n               * @event Abide#formreset\n               */\n\n              $form.trigger('formreset.zf.abide', [$form]);\n            }\n            /**\n             * Destroys an instance of Abide.\n             * Removes error styles and classes from elements, without resetting their values.\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              var _this = this;\n\n              this.$element.off('.abide').find('[data-abide-error]').css('display', 'none');\n              this.$inputs.off('.abide').each(function () {\n                _this.removeErrorClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));\n              });\n            }\n          }]);\n\n          return Abide;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__[\"Plugin\"]);\n        /**\n         * Default settings for plugin\n         */\n\n\n        Abide.defaults = {\n          /**\n           * The default event to validate inputs. Checkboxes and radios validate immediately.\n           * Remove or change this value for manual validation.\n           * @option\n           * @type {?string}\n           * @default 'fieldChange'\n           */\n          validateOn: 'fieldChange',\n\n          /**\n           * Class to be applied to input labels on failed validation.\n           * @option\n           * @type {string}\n           * @default 'is-invalid-label'\n           */\n          labelErrorClass: 'is-invalid-label',\n\n          /**\n           * Class to be applied to inputs on failed validation.\n           * @option\n           * @type {string}\n           * @default 'is-invalid-input'\n           */\n          inputErrorClass: 'is-invalid-input',\n\n          /**\n           * Class selector to use to target Form Errors for show/hide.\n           * @option\n           * @type {string}\n           * @default '.form-error'\n           */\n          formErrorSelector: '.form-error',\n\n          /**\n           * Class added to Form Errors on failed validation.\n           * @option\n           * @type {string}\n           * @default 'is-visible'\n           */\n          formErrorClass: 'is-visible',\n\n          /**\n           * If true, automatically insert when possible:\n           * - `[aria-describedby]` on fields\n           * - `[role=alert]` on form errors and `[for]` on form error labels\n           * - `[aria-live]` on global errors `[data-abide-error]` (see option `a11yErrorLevel`).\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          a11yAttributes: true,\n\n          /**\n           * [aria-live] attribute value to be applied on global errors `[data-abide-error]`.\n           * Options are: 'assertive', 'polite' and 'off'/null\n           * @option\n           * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions\n           * @type {string}\n           * @default 'assertive'\n           */\n          a11yErrorLevel: 'assertive',\n\n          /**\n           * Set to true to validate text inputs on any value change.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          liveValidate: false,\n\n          /**\n           * Set to true to validate inputs on blur.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          validateOnBlur: false,\n          patterns: {\n            alpha: /^[a-zA-Z]+$/,\n            alpha_numeric: /^[a-zA-Z0-9]+$/,\n            integer: /^[-+]?\\d+$/,\n            number: /^[-+]?\\d*(?:[\\.\\,]\\d+)?$/,\n            // amex, visa, diners\n            card: /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(?:222[1-9]|2[3-6][0-9]{2}|27[0-1][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$/,\n            cvv: /^([0-9]){3,4}$/,\n            // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address\n            email: /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,\n            // From CommonRegexJS (@talyssonoc)\n            // https://github.com/talyssonoc/CommonRegexJS/blob/e2901b9f57222bc14069dc8f0598d5f412555411/lib/commonregex.js#L76\n            // For more restrictive URL Regexs, see https://mathiasbynens.be/demo/url-regex.\n            url: /^((?:(https?|ftps?|file|ssh|sftp):\\/\\/|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\((?:[^\\s()<>]+|(?:\\([^\\s()<>]+\\)))*\\))+(?:\\((?:[^\\s()<>]+|(?:\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\\'\".,<>?\\xab\\xbb\\u201c\\u201d\\u2018\\u2019]))$/,\n            // abc.de\n            domain: /^([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,8}$/,\n            datetime: /^([0-2][0-9]{3})\\-([0-1][0-9])\\-([0-3][0-9])T([0-5][0-9])\\:([0-5][0-9])\\:([0-5][0-9])(Z|([\\-\\+]([0-1][0-9])\\:00))$/,\n            // YYYY-MM-DD\n            date: /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,\n            // HH:MM:SS\n            time: /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,\n            dateISO: /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/,\n            // MM/DD/YYYY\n            month_day_year: /^(0[1-9]|1[012])[- \\/.](0[1-9]|[12][0-9]|3[01])[- \\/.]\\d{4}$/,\n            // DD/MM/YYYY\n            day_month_year: /^(0[1-9]|[12][0-9]|3[01])[- \\/.](0[1-9]|1[012])[- \\/.]\\d{4}$/,\n            // #FFF or #FFFFFF\n            color: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/,\n            // Domain || URL\n            website: {\n              test: function test(text) {\n                return Abide.defaults.patterns['domain'].test(text) || Abide.defaults.patterns['url'].test(text);\n              }\n            }\n          },\n\n          /**\n           * Optional validation functions to be used. `equalTo` being the only default included function.\n           * Functions should return only a boolean if the input is valid or not. Functions are given the following arguments:\n           * el : The jQuery element to validate.\n           * required : Boolean value of the required attribute be present or not.\n           * parent : The direct parent of the input.\n           * @option\n           */\n          validators: {\n            equalTo: function equalTo(el, required, parent) {\n              return jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(el.attr('data-equalto'))).val() === el.val();\n            }\n          }\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.accordion.js\":\n      /*!************************************!*\\\n        !*** ./js/foundation.accordion.js ***!\n        \\************************************/\n\n      /*! exports provided: Accordion */\n\n      /***/\n      function jsFoundationAccordionJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Accordion\", function () {\n          return Accordion;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Accordion module.\n         * @module foundation.accordion\n         * @requires foundation.util.keyboard\n         */\n\n\n        var Accordion =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Accordion, _Plugin);\n\n          function Accordion() {\n            _classCallCheck(this, Accordion);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Accordion).apply(this, arguments));\n          }\n\n          _createClass(Accordion, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of an accordion.\n             * @class\n             * @name Accordion\n             * @fires Accordion#init\n             * @param {jQuery} element - jQuery object to make into an accordion.\n             * @param {Object} options - a plain object with settings to override the default options.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Accordion.defaults, this.$element.data(), options);\n              this.className = 'Accordion'; // ie9 back compat\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].register('Accordion', {\n                'ENTER': 'toggle',\n                'SPACE': 'toggle',\n                'ARROW_DOWN': 'next',\n                'ARROW_UP': 'previous'\n              });\n            }\n            /**\n             * Initializes the accordion by animating the preset active pane(s).\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var _this2 = this;\n\n              this._isInitializing = true;\n              this.$element.attr('role', 'tablist');\n              this.$tabs = this.$element.children('[data-accordion-item]');\n              this.$tabs.each(function (idx, el) {\n                var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el),\n                    $content = $el.children('[data-tab-content]'),\n                    id = $content[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"GetYoDigits\"])(6, 'accordion'),\n                    linkId = el.id ? \"\".concat(el.id, \"-label\") : \"\".concat(id, \"-label\");\n                $el.find('a:first').attr({\n                  'aria-controls': id,\n                  'role': 'tab',\n                  'id': linkId,\n                  'aria-expanded': false,\n                  'aria-selected': false\n                });\n                $content.attr({\n                  'role': 'tabpanel',\n                  'aria-labelledby': linkId,\n                  'aria-hidden': true,\n                  'id': id\n                });\n              });\n              var $initActive = this.$element.find('.is-active').children('[data-tab-content]');\n\n              if ($initActive.length) {\n                // Save up the initial hash to return to it later when going back in history\n                this._initialAnchor = $initActive.prev('a').attr('href');\n\n                this._openSingleTab($initActive);\n              }\n\n              this._checkDeepLink = function () {\n                var anchor = window.location.hash;\n\n                if (!anchor.length) {\n                  // If we are still initializing and there is no anchor, then there is nothing to do\n                  if (_this2._isInitializing) return; // Otherwise, move to the initial anchor\n\n                  if (_this2._initialAnchor) anchor = _this2._initialAnchor;\n                }\n\n                var $anchor = anchor && jquery__WEBPACK_IMPORTED_MODULE_0___default()(anchor);\n\n                var $link = anchor && _this2.$element.find(\"[href$=\\\"\".concat(anchor, \"\\\"]\")); // Whether the anchor element that has been found is part of this element\n\n\n                var isOwnAnchor = !!($anchor.length && $link.length); // If there is an anchor for the hash, open it (if not already active)\n\n                if ($anchor && $link && $link.length) {\n                  if (!$link.parent('[data-accordion-item]').hasClass('is-active')) {\n                    _this2._openSingleTab($anchor);\n                  }\n\n                  ;\n                } // Otherwise, close everything\n                else {\n                    _this2._closeAllTabs();\n                  }\n\n                if (isOwnAnchor) {\n                  // Roll up a little to show the titles\n                  if (_this2.options.deepLinkSmudge) {\n                    Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n                      var offset = _this2.$element.offset();\n\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n                        scrollTop: offset.top\n                      }, _this2.options.deepLinkSmudgeDelay);\n                    });\n                  }\n                  /**\n                   * Fires when the plugin has deeplinked at pageload\n                   * @event Accordion#deeplink\n                   */\n\n\n                  _this2.$element.trigger('deeplink.zf.accordion', [$link, $anchor]);\n                }\n              }; //use browser to open a tab, if it exists in this tabset\n\n\n              if (this.options.deepLink) {\n                this._checkDeepLink();\n              }\n\n              this._events();\n\n              this._isInitializing = false;\n            }\n            /**\n             * Adds event handlers for items within the accordion.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this;\n\n              this.$tabs.each(function () {\n                var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n                var $tabContent = $elem.children('[data-tab-content]');\n\n                if ($tabContent.length) {\n                  $elem.children('a').off('click.zf.accordion keydown.zf.accordion').on('click.zf.accordion', function (e) {\n                    e.preventDefault();\n\n                    _this.toggle($tabContent);\n                  }).on('keydown.zf.accordion', function (e) {\n                    _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].handleKey(e, 'Accordion', {\n                      toggle: function toggle() {\n                        _this.toggle($tabContent);\n                      },\n                      next: function next() {\n                        var $a = $elem.next().find('a').focus();\n\n                        if (!_this.options.multiExpand) {\n                          $a.trigger('click.zf.accordion');\n                        }\n                      },\n                      previous: function previous() {\n                        var $a = $elem.prev().find('a').focus();\n\n                        if (!_this.options.multiExpand) {\n                          $a.trigger('click.zf.accordion');\n                        }\n                      },\n                      handled: function handled() {\n                        e.preventDefault();\n                        e.stopPropagation();\n                      }\n                    });\n                  });\n                }\n              });\n\n              if (this.options.deepLink) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._checkDeepLink);\n              }\n            }\n            /**\n             * Toggles the selected content pane's open/close state.\n             * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`).\n             * @function\n             */\n\n          }, {\n            key: \"toggle\",\n            value: function toggle($target) {\n              if ($target.closest('[data-accordion]').is('[disabled]')) {\n                console.info('Cannot toggle an accordion that is disabled.');\n                return;\n              }\n\n              if ($target.parent().hasClass('is-active')) {\n                this.up($target);\n              } else {\n                this.down($target);\n              } //either replace or update browser history\n\n\n              if (this.options.deepLink) {\n                var anchor = $target.prev('a').attr('href');\n\n                if (this.options.updateHistory) {\n                  history.pushState({}, '', anchor);\n                } else {\n                  history.replaceState({}, '', anchor);\n                }\n              }\n            }\n            /**\n             * Opens the accordion tab defined by `$target`.\n             * @param {jQuery} $target - Accordion pane to open (`.accordion-content`).\n             * @fires Accordion#down\n             * @function\n             */\n\n          }, {\n            key: \"down\",\n            value: function down($target) {\n              if ($target.closest('[data-accordion]').is('[disabled]')) {\n                console.info('Cannot call down on an accordion that is disabled.');\n                return;\n              }\n\n              if (this.options.multiExpand) this._openTab($target);else this._openSingleTab($target);\n            }\n            /**\n             * Closes the tab defined by `$target`.\n             * It may be ignored if the Accordion options don't allow it.\n             *\n             * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n             * @fires Accordion#up\n             * @function\n             */\n\n          }, {\n            key: \"up\",\n            value: function up($target) {\n              if (this.$element.is('[disabled]')) {\n                console.info('Cannot call up on an accordion that is disabled.');\n                return;\n              } // Don't close the item if it is already closed\n\n\n              var $targetItem = $target.parent();\n              if (!$targetItem.hasClass('is-active')) return; // Don't close the item if there is no other active item (unless with `allowAllClosed`)\n\n              var $othersItems = $targetItem.siblings();\n              if (!this.options.allowAllClosed && !$othersItems.hasClass('is-active')) return;\n\n              this._closeTab($target);\n            }\n            /**\n             * Make the tab defined by `$target` the only opened tab, closing all others tabs.\n             * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_openSingleTab\",\n            value: function _openSingleTab($target) {\n              // Close all the others active tabs.\n              var $activeContents = this.$element.children('.is-active').children('[data-tab-content]');\n\n              if ($activeContents.length) {\n                this._closeTab($activeContents.not($target));\n              } // Then open the target.\n\n\n              this._openTab($target);\n            }\n            /**\n             * Opens the tab defined by `$target`.\n             * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n             * @fires Accordion#down\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_openTab\",\n            value: function _openTab($target) {\n              var _this3 = this;\n\n              var $targetItem = $target.parent();\n              var targetContentId = $target.attr('aria-labelledby');\n              $target.attr('aria-hidden', false);\n              $targetItem.addClass('is-active');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(targetContentId)).attr({\n                'aria-expanded': true,\n                'aria-selected': true\n              });\n              $target.slideDown(this.options.slideSpeed, function () {\n                /**\n                 * Fires when the tab is done opening.\n                 * @event Accordion#down\n                 */\n                _this3.$element.trigger('down.zf.accordion', [$target]);\n              });\n            }\n            /**\n             * Closes the tab defined by `$target`.\n             * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n             * @fires Accordion#up\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_closeTab\",\n            value: function _closeTab($target) {\n              var _this4 = this;\n\n              var $targetItem = $target.parent();\n              var targetContentId = $target.attr('aria-labelledby');\n              $target.attr('aria-hidden', true);\n              $targetItem.removeClass('is-active');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(targetContentId)).attr({\n                'aria-expanded': false,\n                'aria-selected': false\n              });\n              $target.slideUp(this.options.slideSpeed, function () {\n                /**\n                 * Fires when the tab is done collapsing up.\n                 * @event Accordion#up\n                 */\n                _this4.$element.trigger('up.zf.accordion', [$target]);\n              });\n            }\n            /**\n             * Closes all active tabs\n             * @fires Accordion#up\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_closeAllTabs\",\n            value: function _closeAllTabs() {\n              var $activeTabs = this.$element.children('.is-active').children('[data-tab-content]');\n\n              if ($activeTabs.length) {\n                this._closeTab($activeTabs);\n              }\n            }\n            /**\n             * Destroys an instance of an accordion.\n             * @fires Accordion#destroyed\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', '');\n              this.$element.find('a').off('.zf.accordion');\n\n              if (this.options.deepLink) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._checkDeepLink);\n              }\n            }\n          }]);\n\n          return Accordion;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__[\"Plugin\"]);\n\n        Accordion.defaults = {\n          /**\n           * Amount of time to animate the opening of an accordion pane.\n           * @option\n           * @type {number}\n           * @default 250\n           */\n          slideSpeed: 250,\n\n          /**\n           * Allow the accordion to have multiple open panes.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          multiExpand: false,\n\n          /**\n           * Allow the accordion to close all panes.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          allowAllClosed: false,\n\n          /**\n           * Link the location hash to the open pane.\n           * Set the location hash when the opened pane changes, and open and scroll to the corresponding pane when the location changes.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          deepLink: false,\n\n          /**\n           * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the accordion panel is visible\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          deepLinkSmudge: false,\n\n          /**\n           * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n           * @option\n           * @type {number}\n           * @default 300\n           */\n          deepLinkSmudgeDelay: 300,\n\n          /**\n           * If `deepLink` is enabled, update the browser history with the open accordion\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          updateHistory: false\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.accordionMenu.js\":\n      /*!****************************************!*\\\n        !*** ./js/foundation.accordionMenu.js ***!\n        \\****************************************/\n\n      /*! exports provided: AccordionMenu */\n\n      /***/\n      function jsFoundationAccordionMenuJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"AccordionMenu\", function () {\n          return AccordionMenu;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.nest */\n        \"./js/foundation.util.nest.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * AccordionMenu module.\n         * @module foundation.accordionMenu\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.nest\n         */\n\n\n        var AccordionMenu =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(AccordionMenu, _Plugin);\n\n          function AccordionMenu() {\n            _classCallCheck(this, AccordionMenu);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(AccordionMenu).apply(this, arguments));\n          }\n\n          _createClass(AccordionMenu, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of an accordion menu.\n             * @class\n             * @name AccordionMenu\n             * @fires AccordionMenu#init\n             * @param {jQuery} element - jQuery object to make into an accordion menu.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, AccordionMenu.defaults, this.$element.data(), options);\n              this.className = 'AccordionMenu'; // ie9 back compat\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].register('AccordionMenu', {\n                'ENTER': 'toggle',\n                'SPACE': 'toggle',\n                'ARROW_RIGHT': 'open',\n                'ARROW_UP': 'up',\n                'ARROW_DOWN': 'down',\n                'ARROW_LEFT': 'close',\n                'ESCAPE': 'closeAll'\n              });\n            }\n            /**\n             * Initializes the accordion menu by hiding all nested menus.\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__[\"Nest\"].Feather(this.$element, 'accordion');\n\n              var _this = this;\n\n              this.$element.find('[data-submenu]').not('.is-active').slideUp(0); //.find('a').css('padding-left', '1rem');\n\n              this.$element.attr({\n                'role': 'tree',\n                'aria-multiselectable': this.options.multiOpen\n              });\n              this.$menuLinks = this.$element.find('.is-accordion-submenu-parent');\n              this.$menuLinks.each(function () {\n                var linkId = this.id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"GetYoDigits\"])(6, 'acc-menu-link'),\n                    $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    $sub = $elem.children('[data-submenu]'),\n                    subId = $sub[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"GetYoDigits\"])(6, 'acc-menu'),\n                    isActive = $sub.hasClass('is-active');\n\n                if (_this.options.parentLink) {\n                  var $anchor = $elem.children('a');\n                  $anchor.clone().prependTo($sub).wrap('<li data-is-parent-link class=\"is-submenu-parent-item is-submenu-item is-accordion-submenu-item\"></li>');\n                }\n\n                if (_this.options.submenuToggle) {\n                  $elem.addClass('has-submenu-toggle');\n                  $elem.children('a').after('<button id=\"' + linkId + '\" class=\"submenu-toggle\" aria-controls=\"' + subId + '\" aria-expanded=\"' + isActive + '\" title=\"' + _this.options.submenuToggleText + '\"><span class=\"submenu-toggle-text\">' + _this.options.submenuToggleText + '</span></button>');\n                } else {\n                  $elem.attr({\n                    'aria-controls': subId,\n                    'aria-expanded': isActive,\n                    'id': linkId\n                  });\n                }\n\n                $sub.attr({\n                  'aria-labelledby': linkId,\n                  'aria-hidden': !isActive,\n                  'role': 'group',\n                  'id': subId\n                });\n              });\n              this.$element.find('li').attr({\n                'role': 'treeitem'\n              });\n              var initPanes = this.$element.find('.is-active');\n\n              if (initPanes.length) {\n                var _this = this;\n\n                initPanes.each(function () {\n                  _this.down(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));\n                });\n              }\n\n              this._events();\n            }\n            /**\n             * Adds event handlers for items within the menu.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this;\n\n              this.$element.find('li').each(function () {\n                var $submenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('[data-submenu]');\n\n                if ($submenu.length) {\n                  if (_this.options.submenuToggle) {\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) {\n                      _this.toggle($submenu);\n                    });\n                  } else {\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) {\n                      e.preventDefault();\n\n                      _this.toggle($submenu);\n                    });\n                  }\n                }\n              }).on('keydown.zf.accordionmenu', function (e) {\n                var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    $elements = $element.parent('ul').children('li'),\n                    $prevElement,\n                    $nextElement,\n                    $target = $element.children('[data-submenu]');\n                $elements.each(function (i) {\n                  if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) {\n                    $prevElement = $elements.eq(Math.max(0, i - 1)).find('a').first();\n                    $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)).find('a').first();\n\n                    if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('[data-submenu]:visible').length) {\n                      // has open sub menu\n                      $nextElement = $element.find('li:first-child').find('a').first();\n                    }\n\n                    if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':first-child')) {\n                      // is first element of sub menu\n                      $prevElement = $element.parents('li').first().find('a').first();\n                    } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) {\n                      // if previous element has open sub menu\n                      $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first();\n                    }\n\n                    if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':last-child')) {\n                      // is last element of sub menu\n                      $nextElement = $element.parents('li').first().next('li').find('a').first();\n                    }\n\n                    return;\n                  }\n                });\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].handleKey(e, 'AccordionMenu', {\n                  open: function open() {\n                    if ($target.is(':hidden')) {\n                      _this.down($target);\n\n                      $target.find('li').first().find('a').first().focus();\n                    }\n                  },\n                  close: function close() {\n                    if ($target.length && !$target.is(':hidden')) {\n                      // close active sub of this item\n                      _this.up($target);\n                    } else if ($element.parent('[data-submenu]').length) {\n                      // close currently open sub\n                      _this.up($element.parent('[data-submenu]'));\n\n                      $element.parents('li').first().find('a').first().focus();\n                    }\n                  },\n                  up: function up() {\n                    $prevElement.focus();\n                    return true;\n                  },\n                  down: function down() {\n                    $nextElement.focus();\n                    return true;\n                  },\n                  toggle: function toggle() {\n                    if (_this.options.submenuToggle) {\n                      return false;\n                    }\n\n                    if ($element.children('[data-submenu]').length) {\n                      _this.toggle($element.children('[data-submenu]'));\n\n                      return true;\n                    }\n                  },\n                  closeAll: function closeAll() {\n                    _this.hideAll();\n                  },\n                  handled: function handled(preventDefault) {\n                    if (preventDefault) {\n                      e.preventDefault();\n                    }\n\n                    e.stopImmediatePropagation();\n                  }\n                });\n              }); //.attr('tabindex', 0);\n            }\n            /**\n             * Closes all panes of the menu.\n             * @function\n             */\n\n          }, {\n            key: \"hideAll\",\n            value: function hideAll() {\n              this.up(this.$element.find('[data-submenu]'));\n            }\n            /**\n             * Opens all panes of the menu.\n             * @function\n             */\n\n          }, {\n            key: \"showAll\",\n            value: function showAll() {\n              this.down(this.$element.find('[data-submenu]'));\n            }\n            /**\n             * Toggles the open/close state of a submenu.\n             * @function\n             * @param {jQuery} $target - the submenu to toggle\n             */\n\n          }, {\n            key: \"toggle\",\n            value: function toggle($target) {\n              if (!$target.is(':animated')) {\n                if (!$target.is(':hidden')) {\n                  this.up($target);\n                } else {\n                  this.down($target);\n                }\n              }\n            }\n            /**\n             * Opens the sub-menu defined by `$target`.\n             * @param {jQuery} $target - Sub-menu to open.\n             * @fires AccordionMenu#down\n             */\n\n          }, {\n            key: \"down\",\n            value: function down($target) {\n              var _this2 = this; // If having multiple submenus active is disabled, close all the submenus\n              // that are not parents or children of the targeted submenu.\n\n\n              if (!this.options.multiOpen) {\n                // The \"branch\" of the targetted submenu, from the component root to\n                // the active submenus nested in it.\n                var $targetBranch = $target.parentsUntil(this.$element).add($target).add($target.find('.is-active')); // All the active submenus that are not in the branch.\n\n                var $othersActiveSubmenus = this.$element.find('.is-active').not($targetBranch);\n                this.up($othersActiveSubmenus);\n              }\n\n              $target.addClass('is-active').attr({\n                'aria-hidden': false\n              });\n\n              if (this.options.submenuToggle) {\n                $target.prev('.submenu-toggle').attr({\n                  'aria-expanded': true\n                });\n              } else {\n                $target.parent('.is-accordion-submenu-parent').attr({\n                  'aria-expanded': true\n                });\n              }\n\n              $target.slideDown(this.options.slideSpeed, function () {\n                /**\n                 * Fires when the menu is done opening.\n                 * @event AccordionMenu#down\n                 */\n                _this2.$element.trigger('down.zf.accordionMenu', [$target]);\n              });\n            }\n            /**\n             * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well.\n             * @param {jQuery} $target - Sub-menu to close.\n             * @fires AccordionMenu#up\n             */\n\n          }, {\n            key: \"up\",\n            value: function up($target) {\n              var _this3 = this;\n\n              var $submenus = $target.find('[data-submenu]');\n              var $allmenus = $target.add($submenus);\n              $submenus.slideUp(0);\n              $allmenus.removeClass('is-active').attr('aria-hidden', true);\n\n              if (this.options.submenuToggle) {\n                $allmenus.prev('.submenu-toggle').attr('aria-expanded', false);\n              } else {\n                $allmenus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);\n              }\n\n              $target.slideUp(this.options.slideSpeed, function () {\n                /**\n                 * Fires when the menu is done collapsing up.\n                 * @event AccordionMenu#up\n                 */\n                _this3.$element.trigger('up.zf.accordionMenu', [$target]);\n              });\n            }\n            /**\n             * Destroys an instance of accordion menu.\n             * @fires AccordionMenu#destroyed\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.find('[data-submenu]').slideDown(0).css('display', '');\n              this.$element.find('a').off('click.zf.accordionMenu');\n              this.$element.find('[data-is-parent-link]').detach();\n\n              if (this.options.submenuToggle) {\n                this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle');\n                this.$element.find('.submenu-toggle').remove();\n              }\n\n              _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__[\"Nest\"].Burn(this.$element, 'accordion');\n            }\n          }]);\n\n          return AccordionMenu;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__[\"Plugin\"]);\n\n        AccordionMenu.defaults = {\n          /**\n           * Adds the parent link to the submenu.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          parentLink: false,\n\n          /**\n           * Amount of time to animate the opening of a submenu in ms.\n           * @option\n           * @type {number}\n           * @default 250\n           */\n          slideSpeed: 250,\n\n          /**\n           * Adds a separate submenu toggle button. This allows the parent item to have a link.\n           * @option\n           * @example true\n           */\n          submenuToggle: false,\n\n          /**\n           * The text used for the submenu toggle if enabled. This is used for screen readers only.\n           * @option\n           * @example true\n           */\n          submenuToggleText: 'Toggle menu',\n\n          /**\n           * Allow the menu to have multiple open panes.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          multiOpen: true\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.core.js\":\n      /*!*******************************!*\\\n        !*** ./js/foundation.core.js ***!\n        \\*******************************/\n\n      /*! exports provided: Foundation */\n\n      /***/\n      function jsFoundationCoreJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Foundation\", function () {\n          return Foundation;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        var FOUNDATION_VERSION = '6.5.3'; // Global Foundation object\n        // This is attached to the window, or used as a module for AMD/Browserify\n\n        var Foundation = {\n          version: FOUNDATION_VERSION,\n\n          /**\n           * Stores initialized plugins.\n           */\n          _plugins: {},\n\n          /**\n           * Stores generated unique ids for plugin instances\n           */\n          _uuids: [],\n\n          /**\n           * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.\n           * @param {Object} plugin - The constructor of the plugin.\n           */\n          plugin: function plugin(_plugin, name) {\n            // Object key to use when adding to global Foundation object\n            // Examples: Foundation.Reveal, Foundation.OffCanvas\n            var className = name || functionName(_plugin); // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin\n            // Examples: data-reveal, data-off-canvas\n\n            var attrName = hyphenate(className); // Add to the Foundation object and the plugins list (for reflowing)\n\n            this._plugins[attrName] = this[className] = _plugin;\n          },\n\n          /**\n           * @function\n           * Populates the _uuids array with pointers to each individual plugin instance.\n           * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.\n           * Also fires the initialization event for each plugin, consolidating repetitive code.\n           * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n           * @param {String} name - the name of the plugin, passed as a camelCased string.\n           * @fires Plugin#init\n           */\n          registerPlugin: function registerPlugin(plugin, name) {\n            var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();\n            plugin.uuid = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"GetYoDigits\"])(6, pluginName);\n\n            if (!plugin.$element.attr(\"data-\".concat(pluginName))) {\n              plugin.$element.attr(\"data-\".concat(pluginName), plugin.uuid);\n            }\n\n            if (!plugin.$element.data('zfPlugin')) {\n              plugin.$element.data('zfPlugin', plugin);\n            }\n            /**\n             * Fires when the plugin has initialized.\n             * @event Plugin#init\n             */\n\n\n            plugin.$element.trigger(\"init.zf.\".concat(pluginName));\n\n            this._uuids.push(plugin.uuid);\n\n            return;\n          },\n\n          /**\n           * @function\n           * Removes the plugins uuid from the _uuids array.\n           * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.\n           * Also fires the destroyed event for the plugin, consolidating repetitive code.\n           * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n           * @fires Plugin#destroyed\n           */\n          unregisterPlugin: function unregisterPlugin(plugin) {\n            var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));\n\n            this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);\n\n            plugin.$element.removeAttr(\"data-\".concat(pluginName)).removeData('zfPlugin')\n            /**\n             * Fires when the plugin has been destroyed.\n             * @event Plugin#destroyed\n             */\n            .trigger(\"destroyed.zf.\".concat(pluginName));\n\n            for (var prop in plugin) {\n              plugin[prop] = null; //clean up script to prep for garbage collection.\n            }\n\n            return;\n          },\n\n          /**\n           * @function\n           * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.\n           * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`\n           * @default If no argument is passed, reflow all currently active plugins.\n           */\n          reInit: function reInit(plugins) {\n            var isJQ = plugins instanceof jquery__WEBPACK_IMPORTED_MODULE_0___default.a;\n\n            try {\n              if (isJQ) {\n                plugins.each(function () {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('zfPlugin')._init();\n                });\n              } else {\n                var type = _typeof(plugins),\n                    _this = this,\n                    fns = {\n                  'object': function object(plgs) {\n                    plgs.forEach(function (p) {\n                      p = hyphenate(p);\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-' + p + ']').foundation('_init');\n                    });\n                  },\n                  'string': function string() {\n                    plugins = hyphenate(plugins);\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-' + plugins + ']').foundation('_init');\n                  },\n                  'undefined': function undefined() {\n                    this['object'](Object.keys(_this._plugins));\n                  }\n                };\n\n                fns[type](plugins);\n              }\n            } catch (err) {\n              console.error(err);\n            } finally {\n              return plugins;\n            }\n          },\n\n          /**\n           * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.\n           * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.\n           * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.\n           */\n          reflow: function reflow(elem, plugins) {\n            // If plugins is undefined, just grab everything\n            if (typeof plugins === 'undefined') {\n              plugins = Object.keys(this._plugins);\n            } // If plugins is a string, convert it to an array with one item\n            else if (typeof plugins === 'string') {\n                plugins = [plugins];\n              }\n\n            var _this = this; // Iterate through each plugin\n\n\n            jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(plugins, function (i, name) {\n              // Get the current plugin\n              var plugin = _this._plugins[name]; // Localize the search to all elements inside elem, as well as elem itself, unless elem === document\n\n              var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(elem).find('[data-' + name + ']').addBack('[data-' + name + ']'); // For each plugin found, initialize it\n\n              $elem.each(function () {\n                var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    opts = {}; // Don't double-dip on plugins\n\n                if ($el.data('zfPlugin')) {\n                  console.warn(\"Tried to initialize \" + name + \" on an element that already has a Foundation plugin.\");\n                  return;\n                }\n\n                if ($el.attr('data-options')) {\n                  var thing = $el.attr('data-options').split(';').forEach(function (e, i) {\n                    var opt = e.split(':').map(function (el) {\n                      return el.trim();\n                    });\n                    if (opt[0]) opts[opt[0]] = parseValue(opt[1]);\n                  });\n                }\n\n                try {\n                  $el.data('zfPlugin', new plugin(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), opts));\n                } catch (er) {\n                  console.error(er);\n                } finally {\n                  return;\n                }\n              });\n            });\n          },\n          getFnName: functionName,\n          addToJquery: function addToJquery($) {\n            // TODO: consider not making this a jQuery function\n            // TODO: need way to reflow vs. re-initialize\n\n            /**\n             * The Foundation jQuery method.\n             * @param {String|Array} method - An action to perform on the current jQuery object.\n             */\n            var foundation = function foundation(method) {\n              var type = _typeof(method),\n                  $noJS = $('.no-js');\n\n              if ($noJS.length) {\n                $noJS.removeClass('no-js');\n              }\n\n              if (type === 'undefined') {\n                //needs to initialize the Foundation object, or an individual plugin.\n                _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__[\"MediaQuery\"]._init();\n\n                Foundation.reflow(this);\n              } else if (type === 'string') {\n                //an individual method to invoke on a plugin or group of plugins\n                var args = Array.prototype.slice.call(arguments, 1); //collect all the arguments, if necessary\n\n                var plugClass = this.data('zfPlugin'); //determine the class of plugin\n\n                if (typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined') {\n                  //make sure both the class and method exist\n                  if (this.length === 1) {\n                    //if there's only one, call it directly.\n                    plugClass[method].apply(plugClass, args);\n                  } else {\n                    this.each(function (i, el) {\n                      //otherwise loop through the jQuery collection and invoke the method on each\n                      plugClass[method].apply($(el).data('zfPlugin'), args);\n                    });\n                  }\n                } else {\n                  //error for no class or no method\n                  throw new ReferenceError(\"We're sorry, '\" + method + \"' is not an available method for \" + (plugClass ? functionName(plugClass) : 'this element') + '.');\n                }\n              } else {\n                //error for invalid argument type\n                throw new TypeError(\"We're sorry, \".concat(type, \" is not a valid parameter. You must use a string representing the method you wish to invoke.\"));\n              }\n\n              return this;\n            };\n\n            $.fn.foundation = foundation;\n            return $;\n          }\n        };\n        Foundation.util = {\n          /**\n           * Function for applying a debounce effect to a function call.\n           * @function\n           * @param {Function} func - Function to be called at end of timeout.\n           * @param {Number} delay - Time in ms to delay the call of `func`.\n           * @returns function\n           */\n          throttle: function throttle(func, delay) {\n            var timer = null;\n            return function () {\n              var context = this,\n                  args = arguments;\n\n              if (timer === null) {\n                timer = setTimeout(function () {\n                  func.apply(context, args);\n                  timer = null;\n                }, delay);\n              }\n            };\n          }\n        };\n        window.Foundation = Foundation; // Polyfill for requestAnimationFrame\n\n        (function () {\n          if (!Date.now || !window.Date.now) window.Date.now = Date.now = function () {\n            return new Date().getTime();\n          };\n          var vendors = ['webkit', 'moz'];\n\n          for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n            var vp = vendors[i];\n            window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n            window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n          }\n\n          if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n            var lastTime = 0;\n\n            window.requestAnimationFrame = function (callback) {\n              var now = Date.now();\n              var nextTime = Math.max(lastTime + 16, now);\n              return setTimeout(function () {\n                callback(lastTime = nextTime);\n              }, nextTime - now);\n            };\n\n            window.cancelAnimationFrame = clearTimeout;\n          }\n          /**\n           * Polyfill for performance.now, required by rAF\n           */\n\n\n          if (!window.performance || !window.performance.now) {\n            window.performance = {\n              start: Date.now(),\n              now: function now() {\n                return Date.now() - this.start;\n              }\n            };\n          }\n        })();\n\n        if (!Function.prototype.bind) {\n          Function.prototype.bind = function (oThis) {\n            if (typeof this !== 'function') {\n              // closest thing possible to the ECMAScript 5\n              // internal IsCallable function\n              throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n            }\n\n            var aArgs = Array.prototype.slice.call(arguments, 1),\n                fToBind = this,\n                fNOP = function fNOP() {},\n                fBound = function fBound() {\n              return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));\n            };\n\n            if (this.prototype) {\n              // native functions don't have a prototype\n              fNOP.prototype = this.prototype;\n            }\n\n            fBound.prototype = new fNOP();\n            return fBound;\n          };\n        } // Polyfill to get the name of a function in IE9\n\n\n        function functionName(fn) {\n          if (typeof Function.prototype.name === 'undefined') {\n            var funcNameRegex = /function\\s([^(]{1,})\\(/;\n            var results = funcNameRegex.exec(fn.toString());\n            return results && results.length > 1 ? results[1].trim() : \"\";\n          } else if (typeof fn.prototype === 'undefined') {\n            return fn.constructor.name;\n          } else {\n            return fn.prototype.constructor.name;\n          }\n        }\n\n        function parseValue(str) {\n          if ('true' === str) return true;else if ('false' === str) return false;else if (!isNaN(str * 1)) return parseFloat(str);\n          return str;\n        } // Convert PascalCase to kebab-case\n        // Thank you: http://stackoverflow.com/a/8955580\n\n\n        function hyphenate(str) {\n          return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.core.plugin.js\":\n      /*!**************************************!*\\\n        !*** ./js/foundation.core.plugin.js ***!\n        \\**************************************/\n\n      /*! exports provided: Plugin */\n\n      /***/\n      function jsFoundationCorePluginJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Plugin\", function () {\n          return Plugin;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        } // Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST\n        // {function} _setup (replaces previous constructor),\n        // {function} _destroy (replaces previous destroy)\n\n\n        var Plugin =\n        /*#__PURE__*/\n        function () {\n          function Plugin(element, options) {\n            _classCallCheck(this, Plugin);\n\n            this._setup(element, options);\n\n            var pluginName = getPluginName(this);\n            this.uuid = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"GetYoDigits\"])(6, pluginName);\n\n            if (!this.$element.attr(\"data-\".concat(pluginName))) {\n              this.$element.attr(\"data-\".concat(pluginName), this.uuid);\n            }\n\n            if (!this.$element.data('zfPlugin')) {\n              this.$element.data('zfPlugin', this);\n            }\n            /**\n             * Fires when the plugin has initialized.\n             * @event Plugin#init\n             */\n\n\n            this.$element.trigger(\"init.zf.\".concat(pluginName));\n          }\n\n          _createClass(Plugin, [{\n            key: \"destroy\",\n            value: function destroy() {\n              this._destroy();\n\n              var pluginName = getPluginName(this);\n              this.$element.removeAttr(\"data-\".concat(pluginName)).removeData('zfPlugin')\n              /**\n               * Fires when the plugin has been destroyed.\n               * @event Plugin#destroyed\n               */\n              .trigger(\"destroyed.zf.\".concat(pluginName));\n\n              for (var prop in this) {\n                this[prop] = null; //clean up script to prep for garbage collection.\n              }\n            }\n          }]);\n\n          return Plugin;\n        }(); // Convert PascalCase to kebab-case\n        // Thank you: http://stackoverflow.com/a/8955580\n\n\n        function hyphenate(str) {\n          return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n        }\n\n        function getPluginName(obj) {\n          if (typeof obj.constructor.name !== 'undefined') {\n            return hyphenate(obj.constructor.name);\n          } else {\n            return hyphenate(obj.className);\n          }\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.core.utils.js\":\n      /*!*************************************!*\\\n        !*** ./js/foundation.core.utils.js ***!\n        \\*************************************/\n\n      /*! exports provided: rtl, GetYoDigits, RegExpEscape, transitionend, onLoad, ignoreMousedisappear */\n\n      /***/\n      function jsFoundationCoreUtilsJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"rtl\", function () {\n          return rtl;\n        });\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"GetYoDigits\", function () {\n          return GetYoDigits;\n        });\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"RegExpEscape\", function () {\n          return RegExpEscape;\n        });\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"transitionend\", function () {\n          return transitionend;\n        });\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"onLoad\", function () {\n          return onLoad;\n        });\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"ignoreMousedisappear\", function () {\n          return ignoreMousedisappear;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); // Core Foundation Utilities, utilized in a number of places.\n\n        /**\n         * Returns a boolean for RTL support\n         */\n\n\n        function rtl() {\n          return jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').attr('dir') === 'rtl';\n        }\n        /**\n         * returns a random base-36 uid with namespacing\n         * @function\n         * @param {Number} length - number of random base-36 digits desired. Increase for more random strings.\n         * @param {String} namespace - name of plugin to be incorporated in uid, optional.\n         * @default {String} '' - if no plugin name is provided, nothing is appended to the uid.\n         * @returns {String} - unique id\n         */\n\n\n        function GetYoDigits(length, namespace) {\n          length = length || 6;\n          return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length)).toString(36).slice(1) + (namespace ? \"-\".concat(namespace) : '');\n        }\n        /**\n         * Escape a string so it can be used as a regexp pattern\n         * @function\n         * @see https://stackoverflow.com/a/9310752/4317384\n         *\n         * @param {String} str - string to escape.\n         * @returns {String} - escaped string\n         */\n\n\n        function RegExpEscape(str) {\n          return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n        }\n\n        function transitionend($elem) {\n          var transitions = {\n            'transition': 'transitionend',\n            'WebkitTransition': 'webkitTransitionEnd',\n            'MozTransition': 'transitionend',\n            'OTransition': 'otransitionend'\n          };\n          var elem = document.createElement('div'),\n              end;\n\n          for (var t in transitions) {\n            if (typeof elem.style[t] !== 'undefined') {\n              end = transitions[t];\n            }\n          }\n\n          if (end) {\n            return end;\n          } else {\n            end = setTimeout(function () {\n              $elem.triggerHandler('transitionend', [$elem]);\n            }, 1);\n            return 'transitionend';\n          }\n        }\n        /**\n         * Return an event type to listen for window load.\n         *\n         * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered.\n         * If `handler` is passed, attach it to the event on `$elem`.\n         * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself.\n         * @function\n         *\n         * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed.\n         * @param {Function} [] handler - function to attach to the event.\n         * @returns {String} - event type that should or will be triggered.\n         */\n\n\n        function onLoad($elem, handler) {\n          var didLoad = document.readyState === 'complete';\n          var eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad';\n\n          var cb = function cb() {\n            return $elem.triggerHandler(eventType);\n          };\n\n          if ($elem) {\n            if (handler) $elem.one(eventType, handler);\n            if (didLoad) setTimeout(cb);else jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).one('load', cb);\n          }\n\n          return eventType;\n        }\n        /**\n         * Retuns an handler for the `mouseleave` that ignore disappeared mouses.\n         *\n         * If the mouse \"disappeared\" from the document (like when going on a browser UI element, See https://git.io/zf-11410),\n         * the event is ignored.\n         * - If the `ignoreLeaveWindow` is `true`, the event is ignored when the user actually left the window\n         *   (like by switching to an other window with [Alt]+[Tab]).\n         * - If the `ignoreReappear` is `true`, the event will be ignored when the mouse will reappear later on the document\n         *   outside of the element it left.\n         *\n         * @function\n         *\n         * @param {Function} [] handler - handler for the filtered `mouseleave` event to watch.\n         * @param {Object} [] options - object of options:\n         * - {Boolean} [false] ignoreLeaveWindow - also ignore when the user switched windows.\n         * - {Boolean} [false] ignoreReappear - also ignore when the mouse reappeared outside of the element it left.\n         * @returns {Function} - filtered handler to use to listen on the `mouseleave` event.\n         */\n\n\n        function ignoreMousedisappear(handler) {\n          var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n              _ref$ignoreLeaveWindo = _ref.ignoreLeaveWindow,\n              ignoreLeaveWindow = _ref$ignoreLeaveWindo === void 0 ? false : _ref$ignoreLeaveWindo,\n              _ref$ignoreReappear = _ref.ignoreReappear,\n              ignoreReappear = _ref$ignoreReappear === void 0 ? false : _ref$ignoreReappear;\n\n          return function leaveEventHandler(eLeave) {\n            for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n              rest[_key - 1] = arguments[_key];\n            }\n\n            var callback = handler.bind.apply(handler, [this, eLeave].concat(rest)); // The mouse left: call the given callback if the mouse entered elsewhere\n\n            if (eLeave.relatedTarget !== null) {\n              return callback();\n            } // Otherwise, check if the mouse actually left the window.\n            // In firefox if the user switched between windows, the window sill have the focus by the time\n            // the event is triggered. We have to debounce the event to test this case.\n\n\n            setTimeout(function leaveEventDebouncer() {\n              if (!ignoreLeaveWindow && document.hasFocus && !document.hasFocus()) {\n                return callback();\n              } // Otherwise, wait for the mouse to reeapear outside of the element,\n\n\n              if (!ignoreReappear) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).one('mouseenter', function reenterEventHandler(eReenter) {\n                  if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(eLeave.currentTarget).has(eReenter.target).length) {\n                    // Fill where the mouse finally entered.\n                    eLeave.relatedTarget = eReenter.target;\n                    callback();\n                  }\n                });\n              }\n            }, 0);\n          };\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.drilldown.js\":\n      /*!************************************!*\\\n        !*** ./js/foundation.drilldown.js ***!\n        \\************************************/\n\n      /*! exports provided: Drilldown */\n\n      /***/\n      function jsFoundationDrilldownJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Drilldown\", function () {\n          return Drilldown;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.nest */\n        \"./js/foundation.util.nest.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_box__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.util.box */\n        \"./js/foundation.util.box.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Drilldown module.\n         * @module foundation.drilldown\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.nest\n         * @requires foundation.util.box\n         */\n\n\n        var Drilldown =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Drilldown, _Plugin);\n\n          function Drilldown() {\n            _classCallCheck(this, Drilldown);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Drilldown).apply(this, arguments));\n          }\n\n          _createClass(Drilldown, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of a drilldown menu.\n             * @class\n             * @name Drilldown\n             * @param {jQuery} element - jQuery object to make into an accordion menu.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Drilldown.defaults, this.$element.data(), options);\n              this.className = 'Drilldown'; // ie9 back compat\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].register('Drilldown', {\n                'ENTER': 'open',\n                'SPACE': 'open',\n                'ARROW_RIGHT': 'next',\n                'ARROW_UP': 'up',\n                'ARROW_DOWN': 'down',\n                'ARROW_LEFT': 'previous',\n                'ESCAPE': 'close',\n                'TAB': 'down',\n                'SHIFT_TAB': 'up'\n              });\n            }\n            /**\n             * Initializes the drilldown by creating jQuery collections of elements\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__[\"Nest\"].Feather(this.$element, 'drilldown');\n\n              if (this.options.autoApplyClass) {\n                this.$element.addClass('drilldown');\n              }\n\n              this.$element.attr({\n                'role': 'tree',\n                'aria-multiselectable': false\n              });\n              this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a');\n              this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]').attr('role', 'group');\n              this.$menuItems = this.$element.find('li').not('.js-drilldown-back').attr('role', 'treeitem').find('a'); // Set the main menu as current by default (unless a submenu is selected)\n              // Used to set the wrapper height when the drilldown is closed/reopened from any (sub)menu\n\n              this.$currentMenu = this.$element;\n              this.$element.attr('data-mutate', this.$element.attr('data-drilldown') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"GetYoDigits\"])(6, 'drilldown'));\n\n              this._prepareMenu();\n\n              this._registerEvents();\n\n              this._keyboardEvents();\n            }\n            /**\n             * prepares drilldown menu by setting attributes to links and elements\n             * sets a min height to prevent content jumping\n             * wraps the element if not already wrapped\n             * @private\n             * @function\n             */\n\n          }, {\n            key: \"_prepareMenu\",\n            value: function _prepareMenu() {\n              var _this = this; // if(!this.options.holdOpen){\n              //   this._menuLinkEvents();\n              // }\n\n\n              this.$submenuAnchors.each(function () {\n                var $link = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n                var $sub = $link.parent();\n\n                if (_this.options.parentLink) {\n                  $link.clone().prependTo($sub.children('[data-submenu]')).wrap('<li data-is-parent-link class=\"is-submenu-parent-item is-submenu-item is-drilldown-submenu-item\" role=\"menuitem\"></li>');\n                }\n\n                $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0);\n                $link.children('[data-submenu]').attr({\n                  'aria-hidden': true,\n                  'tabindex': 0,\n                  'role': 'group'\n                });\n\n                _this._events($link);\n              });\n              this.$submenus.each(function () {\n                var $menu = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    $back = $menu.find('.js-drilldown-back');\n\n                if (!$back.length) {\n                  switch (_this.options.backButtonPosition) {\n                    case \"bottom\":\n                      $menu.append(_this.options.backButton);\n                      break;\n\n                    case \"top\":\n                      $menu.prepend(_this.options.backButton);\n                      break;\n\n                    default:\n                      console.error(\"Unsupported backButtonPosition value '\" + _this.options.backButtonPosition + \"'\");\n                  }\n                }\n\n                _this._back($menu);\n              });\n              this.$submenus.addClass('invisible');\n\n              if (!this.options.autoHeight) {\n                this.$submenus.addClass('drilldown-submenu-cover-previous');\n              } // create a wrapper on element if it doesn't exist.\n\n\n              if (!this.$element.parent().hasClass('is-drilldown')) {\n                this.$wrapper = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.wrapper).addClass('is-drilldown');\n                if (this.options.animateHeight) this.$wrapper.addClass('animate-height');\n                this.$element.wrap(this.$wrapper);\n              } // set wrapper\n\n\n              this.$wrapper = this.$element.parent();\n              this.$wrapper.css(this._getMaxDims());\n            }\n          }, {\n            key: \"_resize\",\n            value: function _resize() {\n              this.$wrapper.css({\n                'max-width': 'none',\n                'min-height': 'none'\n              }); // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths\n\n              this.$wrapper.css(this._getMaxDims());\n            }\n            /**\n             * Adds event handlers to elements in the menu.\n             * @function\n             * @private\n             * @param {jQuery} $elem - the current menu item to add handlers to.\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events($elem) {\n              var _this = this;\n\n              $elem.off('click.zf.drilldown').on('click.zf.drilldown', function (e) {\n                if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')) {\n                  e.stopImmediatePropagation();\n                  e.preventDefault();\n                } // if(e.target !== e.currentTarget.firstElementChild){\n                //   return false;\n                // }\n\n\n                _this._show($elem.parent('li'));\n\n                if (_this.options.closeOnClick) {\n                  var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body');\n                  $body.off('.zf.drilldown').on('click.zf.drilldown', function (e) {\n                    if (e.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(_this.$element[0], e.target)) {\n                      return;\n                    }\n\n                    e.preventDefault();\n\n                    _this._hideAll();\n\n                    $body.off('.zf.drilldown');\n                  });\n                }\n              });\n            }\n            /**\n             * Adds event handlers to the menu element.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_registerEvents\",\n            value: function _registerEvents() {\n              if (this.options.scrollTop) {\n                this._bindHandler = this._scrollTop.bind(this);\n                this.$element.on('open.zf.drilldown hide.zf.drilldown closed.zf.drilldown', this._bindHandler);\n              }\n\n              this.$element.on('mutateme.zf.trigger', this._resize.bind(this));\n            }\n            /**\n             * Scroll to Top of Element or data-scroll-top-element\n             * @function\n             * @fires Drilldown#scrollme\n             */\n\n          }, {\n            key: \"_scrollTop\",\n            value: function _scrollTop() {\n              var _this = this;\n\n              var $scrollTopElement = _this.options.scrollTopElement != '' ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(_this.options.scrollTopElement) : _this.$element,\n                  scrollPos = parseInt($scrollTopElement.offset().top + _this.options.scrollTopOffset, 10);\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').stop(true).animate({\n                scrollTop: scrollPos\n              }, _this.options.animationDuration, _this.options.animationEasing, function () {\n                /**\n                  * Fires after the menu has scrolled\n                  * @event Drilldown#scrollme\n                  */\n                if (this === jquery__WEBPACK_IMPORTED_MODULE_0___default()('html')[0]) _this.$element.trigger('scrollme.zf.drilldown');\n              });\n            }\n            /**\n             * Adds keydown event listener to `li`'s in the menu.\n             * @private\n             */\n\n          }, {\n            key: \"_keyboardEvents\",\n            value: function _keyboardEvents() {\n              var _this = this;\n\n              this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function (e) {\n                var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    $elements = $element.parent('li').parent('ul').children('li').children('a'),\n                    $prevElement,\n                    $nextElement;\n                $elements.each(function (i) {\n                  if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) {\n                    $prevElement = $elements.eq(Math.max(0, i - 1));\n                    $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1));\n                    return;\n                  }\n                });\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].handleKey(e, 'Drilldown', {\n                  next: function next() {\n                    if ($element.is(_this.$submenuAnchors)) {\n                      _this._show($element.parent('li'));\n\n                      $element.parent('li').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"transitionend\"])($element), function () {\n                        $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n                      });\n                      return true;\n                    }\n                  },\n                  previous: function previous() {\n                    _this._hide($element.parent('li').parent('ul'));\n\n                    $element.parent('li').parent('ul').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"transitionend\"])($element), function () {\n                      setTimeout(function () {\n                        $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n                      }, 1);\n                    });\n                    return true;\n                  },\n                  up: function up() {\n                    $prevElement.focus(); // Don't tap focus on first element in root ul\n\n                    return !$element.is(_this.$element.find('> li:first-child > a'));\n                  },\n                  down: function down() {\n                    $nextElement.focus(); // Don't tap focus on last element in root ul\n\n                    return !$element.is(_this.$element.find('> li:last-child > a'));\n                  },\n                  close: function close() {\n                    // Don't close on element in root ul\n                    if (!$element.is(_this.$element.find('> li > a'))) {\n                      _this._hide($element.parent().parent());\n\n                      $element.parent().parent().siblings('a').focus();\n                    }\n                  },\n                  open: function open() {\n                    if (_this.options.parentLink && $element.attr('href')) {\n                      // Link with href\n                      return false;\n                    } else if (!$element.is(_this.$menuItems)) {\n                      // not menu item means back button\n                      _this._hide($element.parent('li').parent('ul'));\n\n                      $element.parent('li').parent('ul').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"transitionend\"])($element), function () {\n                        setTimeout(function () {\n                          $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n                        }, 1);\n                      });\n                      return true;\n                    } else if ($element.is(_this.$submenuAnchors)) {\n                      // Sub menu item\n                      _this._show($element.parent('li'));\n\n                      $element.parent('li').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"transitionend\"])($element), function () {\n                        $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n                      });\n                      return true;\n                    }\n                  },\n                  handled: function handled(preventDefault) {\n                    if (preventDefault) {\n                      e.preventDefault();\n                    }\n\n                    e.stopImmediatePropagation();\n                  }\n                });\n              }); // end keyboardAccess\n            }\n            /**\n             * Closes all open elements, and returns to root menu.\n             * @function\n             * @fires Drilldown#closed\n             */\n\n          }, {\n            key: \"_hideAll\",\n            value: function _hideAll() {\n              var $elem = this.$element.find('.is-drilldown-submenu.is-active').addClass('is-closing');\n              if (this.options.autoHeight) this.$wrapper.css({\n                height: $elem.parent().closest('ul').data('calcHeight')\n              });\n              $elem.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"transitionend\"])($elem), function (e) {\n                $elem.removeClass('is-active is-closing');\n              });\n              /**\n               * Fires when the menu is fully closed.\n               * @event Drilldown#closed\n               */\n\n              this.$element.trigger('closed.zf.drilldown');\n            }\n            /**\n             * Adds event listener for each `back` button, and closes open menus.\n             * @function\n             * @fires Drilldown#back\n             * @param {jQuery} $elem - the current sub-menu to add `back` event.\n             */\n\n          }, {\n            key: \"_back\",\n            value: function _back($elem) {\n              var _this = this;\n\n              $elem.off('click.zf.drilldown');\n              $elem.children('.js-drilldown-back').on('click.zf.drilldown', function (e) {\n                e.stopImmediatePropagation(); // console.log('mouseup on back');\n\n                _this._hide($elem); // If there is a parent submenu, call show\n\n\n                var parentSubMenu = $elem.parent('li').parent('ul').parent('li');\n\n                if (parentSubMenu.length) {\n                  _this._show(parentSubMenu);\n                }\n              });\n            }\n            /**\n             * Adds event listener to menu items w/o submenus to close open menus on click.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_menuLinkEvents\",\n            value: function _menuLinkEvents() {\n              var _this = this;\n\n              this.$menuItems.not('.is-drilldown-submenu-parent').off('click.zf.drilldown').on('click.zf.drilldown', function (e) {\n                // e.stopImmediatePropagation();\n                setTimeout(function () {\n                  _this._hideAll();\n                }, 0);\n              });\n            }\n            /**\n             * Sets the CSS classes for submenu to show it.\n             * @function\n             * @private\n             * @param {jQuery} $elem - the target submenu (`ul` tag)\n             * @param {boolean} trigger - trigger drilldown event\n             */\n\n          }, {\n            key: \"_setShowSubMenuClasses\",\n            value: function _setShowSubMenuClasses($elem, trigger) {\n              $elem.addClass('is-active').removeClass('invisible').attr('aria-hidden', false);\n              $elem.parent('li').attr('aria-expanded', true);\n\n              if (trigger === true) {\n                this.$element.trigger('open.zf.drilldown', [$elem]);\n              }\n            }\n            /**\n             * Sets the CSS classes for submenu to hide it.\n             * @function\n             * @private\n             * @param {jQuery} $elem - the target submenu (`ul` tag)\n             * @param {boolean} trigger - trigger drilldown event\n             */\n\n          }, {\n            key: \"_setHideSubMenuClasses\",\n            value: function _setHideSubMenuClasses($elem, trigger) {\n              $elem.removeClass('is-active').addClass('invisible').attr('aria-hidden', true);\n              $elem.parent('li').attr('aria-expanded', false);\n\n              if (trigger === true) {\n                $elem.trigger('hide.zf.drilldown', [$elem]);\n              }\n            }\n            /**\n             * Opens a specific drilldown (sub)menu no matter which (sub)menu in it is currently visible.\n             * Compared to _show() this lets you jump into any submenu without clicking through every submenu on the way to it.\n             * @function\n             * @fires Drilldown#open\n             * @param {jQuery} $elem - the target (sub)menu (`ul` tag)\n             * @param {boolean} autoFocus - if true the first link in the target (sub)menu gets auto focused\n             */\n\n          }, {\n            key: \"_showMenu\",\n            value: function _showMenu($elem, autoFocus) {\n              var _this = this; // Reset drilldown\n\n\n              var $expandedSubmenus = this.$element.find('li[aria-expanded=\"true\"] > ul[data-submenu]');\n              $expandedSubmenus.each(function (index) {\n                _this._setHideSubMenuClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));\n              }); // Save the menu as the currently displayed one.\n\n              this.$currentMenu = $elem; // If target menu is root, focus first link & exit\n\n              if ($elem.is('[data-drilldown]')) {\n                if (autoFocus === true) $elem.find('li[role=\"treeitem\"] > a').first().focus();\n                if (this.options.autoHeight) this.$wrapper.css('height', $elem.data('calcHeight'));\n                return;\n              } // Find all submenus on way to root incl. the element itself\n\n\n              var $submenus = $elem.children().first().parentsUntil('[data-drilldown]', '[data-submenu]'); // Open target menu and all submenus on its way to root\n\n              $submenus.each(function (index) {\n                // Update height of first child (target menu) if autoHeight option true\n                if (index === 0 && _this.options.autoHeight) {\n                  _this.$wrapper.css('height', jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('calcHeight'));\n                }\n\n                var isLastChild = index == $submenus.length - 1; // Add transitionsend listener to last child (root due to reverse order) to open target menu's first link\n                // Last child makes sure the event gets always triggered even if going through several menus\n\n                if (isLastChild === true) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"transitionend\"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)), function () {\n                    if (autoFocus === true) {\n                      $elem.find('li[role=\"treeitem\"] > a').first().focus();\n                    }\n                  });\n                }\n\n                _this._setShowSubMenuClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), isLastChild);\n              });\n            }\n            /**\n             * Opens a submenu.\n             * @function\n             * @fires Drilldown#open\n             * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag.\n             */\n\n          }, {\n            key: \"_show\",\n            value: function _show($elem) {\n              var $submenu = $elem.children('[data-submenu]');\n              $elem.attr('aria-expanded', true);\n              this.$currentMenu = $submenu;\n              $submenu.addClass('is-active').removeClass('invisible').attr('aria-hidden', false);\n\n              if (this.options.autoHeight) {\n                this.$wrapper.css({\n                  height: $submenu.data('calcHeight')\n                });\n              }\n              /**\n               * Fires when the submenu has opened.\n               * @event Drilldown#open\n               */\n\n\n              this.$element.trigger('open.zf.drilldown', [$elem]);\n            }\n            /**\n             * Hides a submenu\n             * @function\n             * @fires Drilldown#hide\n             * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag.\n             */\n\n          }, {\n            key: \"_hide\",\n            value: function _hide($elem) {\n              if (this.options.autoHeight) this.$wrapper.css({\n                height: $elem.parent().closest('ul').data('calcHeight')\n              });\n\n              var _this = this;\n\n              $elem.parent('li').attr('aria-expanded', false);\n              $elem.attr('aria-hidden', true);\n              $elem.addClass('is-closing').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"transitionend\"])($elem), function () {\n                $elem.removeClass('is-active is-closing');\n                $elem.blur().addClass('invisible');\n              });\n              /**\n               * Fires when the submenu has closed.\n               * @event Drilldown#hide\n               */\n\n              $elem.trigger('hide.zf.drilldown', [$elem]);\n            }\n            /**\n             * Iterates through the nested menus to calculate the min-height, and max-width for the menu.\n             * Prevents content jumping.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_getMaxDims\",\n            value: function _getMaxDims() {\n              var maxHeight = 0,\n                  result = {},\n                  _this = this; // Recalculate menu heights and total max height\n\n\n              this.$submenus.add(this.$element).each(function () {\n                var numOfElems = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('li').length;\n\n                var height = _foundation_util_box__WEBPACK_IMPORTED_MODULE_4__[\"Box\"].GetDimensions(this).height;\n\n                maxHeight = height > maxHeight ? height : maxHeight;\n\n                if (_this.options.autoHeight) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('calcHeight', height);\n                }\n              });\n              if (this.options.autoHeight) result['height'] = this.$currentMenu.data('calcHeight');else result['min-height'] = \"\".concat(maxHeight, \"px\");\n              result['max-width'] = \"\".concat(this.$element[0].getBoundingClientRect().width, \"px\");\n              return result;\n            }\n            /**\n             * Destroys the Drilldown Menu\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              if (this.options.scrollTop) this.$element.off('.zf.drilldown', this._bindHandler);\n\n              this._hideAll();\n\n              this.$element.off('mutateme.zf.trigger');\n\n              _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__[\"Nest\"].Burn(this.$element, 'drilldown');\n\n              this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role');\n              this.$submenuAnchors.each(function () {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).off('.zf.drilldown');\n              });\n              this.$element.find('[data-is-parent-link]').detach();\n              this.$submenus.removeClass('drilldown-submenu-cover-previous invisible');\n              this.$element.find('a').each(function () {\n                var $link = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n                $link.removeAttr('tabindex');\n\n                if ($link.data('savedHref')) {\n                  $link.attr('href', $link.data('savedHref')).removeData('savedHref');\n                } else {\n                  return;\n                }\n              });\n            }\n          }]);\n\n          return Drilldown;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_5__[\"Plugin\"]);\n\n        Drilldown.defaults = {\n          /**\n           * Drilldowns depend on styles in order to function properly; in the default build of Foundation these are\n           * on the `drilldown` class. This option auto-applies this class to the drilldown upon initialization.\n           * @option\n           * @type {boolian}\n           * @default true\n           */\n          autoApplyClass: true,\n\n          /**\n           * Markup used for JS generated back button. Prepended  or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\\`) if copy and pasting.\n           * @option\n           * @type {string}\n           * @default '<li class=\"js-drilldown-back\"><a tabindex=\"0\">Back</a></li>'\n           */\n          backButton: '<li class=\"js-drilldown-back\"><a tabindex=\"0\">Back</a></li>',\n\n          /**\n           * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`.\n           * @option\n           * @type {string}\n           * @default top\n           */\n          backButtonPosition: 'top',\n\n          /**\n           * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\\`) if copy and pasting.\n           * @option\n           * @type {string}\n           * @default '<div></div>'\n           */\n          wrapper: '<div></div>',\n\n          /**\n           * Adds the parent link to the submenu.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          parentLink: false,\n\n          /**\n           * Allow the menu to return to root list on body click.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          closeOnClick: false,\n\n          /**\n           * Allow the menu to auto adjust height.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          autoHeight: false,\n\n          /**\n           * Animate the auto adjust height.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          animateHeight: false,\n\n          /**\n           * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          scrollTop: false,\n\n          /**\n           * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          scrollTopElement: '',\n\n          /**\n           * ScrollTop offset\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          scrollTopOffset: 0,\n\n          /**\n           * Scroll animation duration\n           * @option\n           * @type {number}\n           * @default 500\n           */\n          animationDuration: 500,\n\n          /**\n           * Scroll animation easing. Can be `'swing'` or `'linear'`.\n           * @option\n           * @type {string}\n           * @see {@link https://api.jquery.com/animate|JQuery animate}\n           * @default 'swing'\n           */\n          animationEasing: 'swing' // holdOpen: false\n\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.dropdown.js\":\n      /*!***********************************!*\\\n        !*** ./js/foundation.dropdown.js ***!\n        \\***********************************/\n\n      /*! exports provided: Dropdown */\n\n      /***/\n      function jsFoundationDropdownJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Dropdown\", function () {\n          return Dropdown;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_positionable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.positionable */\n        \"./js/foundation.positionable.js\");\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n        /* harmony import */\n\n\n        var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.util.touch */\n        \"./js/foundation.util.touch.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _get(target, property, receiver) {\n          if (typeof Reflect !== \"undefined\" && Reflect.get) {\n            _get = Reflect.get;\n          } else {\n            _get = function _get(target, property, receiver) {\n              var base = _superPropBase(target, property);\n\n              if (!base) return;\n              var desc = Object.getOwnPropertyDescriptor(base, property);\n\n              if (desc.get) {\n                return desc.get.call(receiver);\n              }\n\n              return desc.value;\n            };\n          }\n\n          return _get(target, property, receiver || target);\n        }\n\n        function _superPropBase(object, property) {\n          while (!Object.prototype.hasOwnProperty.call(object, property)) {\n            object = _getPrototypeOf(object);\n            if (object === null) break;\n          }\n\n          return object;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Dropdown module.\n         * @module foundation.dropdown\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.box\n         * @requires foundation.util.triggers\n         */\n\n\n        var Dropdown =\n        /*#__PURE__*/\n        function (_Positionable) {\n          _inherits(Dropdown, _Positionable);\n\n          function Dropdown() {\n            _classCallCheck(this, Dropdown);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Dropdown).apply(this, arguments));\n          }\n\n          _createClass(Dropdown, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of a dropdown.\n             * @class\n             * @name Dropdown\n             * @param {jQuery} element - jQuery object to make into a dropdown.\n             *        Object should be of the dropdown panel, rather than its anchor.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Dropdown.defaults, this.$element.data(), options);\n              this.className = 'Dropdown'; // ie9 back compat\n              // Triggers init is idempotent, just need to make sure it is initialized\n\n              _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].register('Dropdown', {\n                'ENTER': 'toggle',\n                'SPACE': 'toggle',\n                'ESCAPE': 'close'\n              });\n            }\n            /**\n             * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var $id = this.$element.attr('id');\n              this.$anchors = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-toggle=\\\"\".concat($id, \"\\\"]\")).length ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-toggle=\\\"\".concat($id, \"\\\"]\")) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-open=\\\"\".concat($id, \"\\\"]\"));\n              this.$anchors.attr({\n                'aria-controls': $id,\n                'data-is-focus': false,\n                'data-yeti-box': $id,\n                'aria-haspopup': true,\n                'aria-expanded': false\n              });\n\n              this._setCurrentAnchor(this.$anchors.first());\n\n              if (this.options.parentClass) {\n                this.$parent = this.$element.parents('.' + this.options.parentClass);\n              } else {\n                this.$parent = null;\n              } // Set [aria-labelledby] on the Dropdown if it is not set\n\n\n              if (typeof this.$element.attr('aria-labelledby') === 'undefined') {\n                // Get the anchor ID or create one\n                if (typeof this.$currentAnchor.attr('id') === 'undefined') {\n                  this.$currentAnchor.attr('id', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"GetYoDigits\"])(6, 'dd-anchor'));\n                }\n\n                ;\n                this.$element.attr('aria-labelledby', this.$currentAnchor.attr('id'));\n              }\n\n              this.$element.attr({\n                'aria-hidden': 'true',\n                'data-yeti-box': $id,\n                'data-resize': $id\n              });\n\n              _get(_getPrototypeOf(Dropdown.prototype), \"_init\", this).call(this);\n\n              this._events();\n            }\n          }, {\n            key: \"_getDefaultPosition\",\n            value: function _getDefaultPosition() {\n              // handle legacy classnames\n              var position = this.$element[0].className.match(/(top|left|right|bottom)/g);\n\n              if (position) {\n                return position[0];\n              } else {\n                return 'bottom';\n              }\n            }\n          }, {\n            key: \"_getDefaultAlignment\",\n            value: function _getDefaultAlignment() {\n              // handle legacy float approach\n              var horizontalPosition = /float-(\\S+)/.exec(this.$currentAnchor.attr('class'));\n\n              if (horizontalPosition) {\n                return horizontalPosition[1];\n              }\n\n              return _get(_getPrototypeOf(Dropdown.prototype), \"_getDefaultAlignment\", this).call(this);\n            }\n            /**\n             * Sets the position and orientation of the dropdown pane, checks for collisions if allow-overlap is not true.\n             * Recursively calls itself if a collision is detected, with a new position class.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_setPosition\",\n            value: function _setPosition() {\n              this.$element.removeClass(\"has-position-\".concat(this.position, \" has-alignment-\").concat(this.alignment));\n\n              _get(_getPrototypeOf(Dropdown.prototype), \"_setPosition\", this).call(this, this.$currentAnchor, this.$element, this.$parent);\n\n              this.$element.addClass(\"has-position-\".concat(this.position, \" has-alignment-\").concat(this.alignment));\n            }\n            /**\n             * Make it a current anchor.\n             * Current anchor as the reference for the position of Dropdown panes.\n             * @param {HTML} el - DOM element of the anchor.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_setCurrentAnchor\",\n            value: function _setCurrentAnchor(el) {\n              this.$currentAnchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el);\n            }\n            /**\n             * Adds event listeners to the element utilizing the triggers utility library.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this;\n\n              this.$element.on({\n                'open.zf.trigger': this.open.bind(this),\n                'close.zf.trigger': this.close.bind(this),\n                'toggle.zf.trigger': this.toggle.bind(this),\n                'resizeme.zf.trigger': this._setPosition.bind(this)\n              });\n              this.$anchors.off('click.zf.trigger').on('click.zf.trigger', function () {\n                _this._setCurrentAnchor(this);\n              });\n\n              if (this.options.hover) {\n                this.$anchors.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () {\n                  _this._setCurrentAnchor(this);\n\n                  var bodyData = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').data();\n\n                  if (typeof bodyData.whatinput === 'undefined' || bodyData.whatinput === 'mouse') {\n                    clearTimeout(_this.timeout);\n                    _this.timeout = setTimeout(function () {\n                      _this.open();\n\n                      _this.$anchors.data('hover', true);\n                    }, _this.options.hoverDelay);\n                  }\n                }).on('mouseleave.zf.dropdown', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"ignoreMousedisappear\"])(function () {\n                  clearTimeout(_this.timeout);\n                  _this.timeout = setTimeout(function () {\n                    _this.close();\n\n                    _this.$anchors.data('hover', false);\n                  }, _this.options.hoverDelay);\n                }));\n\n                if (this.options.hoverPane) {\n                  this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () {\n                    clearTimeout(_this.timeout);\n                  }).on('mouseleave.zf.dropdown', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"ignoreMousedisappear\"])(function () {\n                    clearTimeout(_this.timeout);\n                    _this.timeout = setTimeout(function () {\n                      _this.close();\n\n                      _this.$anchors.data('hover', false);\n                    }, _this.options.hoverDelay);\n                  }));\n                }\n              }\n\n              this.$anchors.add(this.$element).on('keydown.zf.dropdown', function (e) {\n                var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    visibleFocusableElements = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].findFocusable(_this.$element);\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].handleKey(e, 'Dropdown', {\n                  open: function open() {\n                    if ($target.is(_this.$anchors) && !$target.is('input, textarea')) {\n                      _this.open();\n\n                      _this.$element.attr('tabindex', -1).focus();\n\n                      e.preventDefault();\n                    }\n                  },\n                  close: function close() {\n                    _this.close();\n\n                    _this.$anchors.focus();\n                  }\n                });\n              });\n            }\n            /**\n             * Adds an event handler to the body to close any dropdowns on a click.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_addBodyHandler\",\n            value: function _addBodyHandler() {\n              var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body).not(this.$element),\n                  _this = this;\n\n              $body.off('click.zf.dropdown').on('click.zf.dropdown', function (e) {\n                if (_this.$anchors.is(e.target) || _this.$anchors.find(e.target).length) {\n                  return;\n                }\n\n                if (_this.$element.is(e.target) || _this.$element.find(e.target).length) {\n                  return;\n                }\n\n                _this.close();\n\n                $body.off('click.zf.dropdown');\n              });\n            }\n            /**\n             * Opens the dropdown pane, and fires a bubbling event to close other dropdowns.\n             * @function\n             * @fires Dropdown#closeme\n             * @fires Dropdown#show\n             */\n\n          }, {\n            key: \"open\",\n            value: function open() {\n              // var _this = this;\n\n              /**\n               * Fires to close other open dropdowns, typically when dropdown is opening\n               * @event Dropdown#closeme\n               */\n              this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id'));\n              this.$anchors.addClass('hover').attr({\n                'aria-expanded': true\n              }); // this.$element/*.show()*/;\n\n              this.$element.addClass('is-opening');\n\n              this._setPosition();\n\n              this.$element.removeClass('is-opening').addClass('is-open').attr({\n                'aria-hidden': false\n              });\n\n              if (this.options.autoFocus) {\n                var $focusable = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].findFocusable(this.$element);\n\n                if ($focusable.length) {\n                  $focusable.eq(0).focus();\n                }\n              }\n\n              if (this.options.closeOnClick) {\n                this._addBodyHandler();\n              }\n\n              if (this.options.trapFocus) {\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].trapFocus(this.$element);\n              }\n              /**\n               * Fires once the dropdown is visible.\n               * @event Dropdown#show\n               */\n\n\n              this.$element.trigger('show.zf.dropdown', [this.$element]);\n            }\n            /**\n             * Closes the open dropdown pane.\n             * @function\n             * @fires Dropdown#hide\n             */\n\n          }, {\n            key: \"close\",\n            value: function close() {\n              if (!this.$element.hasClass('is-open')) {\n                return false;\n              }\n\n              this.$element.removeClass('is-open').attr({\n                'aria-hidden': true\n              });\n              this.$anchors.removeClass('hover').attr('aria-expanded', false);\n              /**\n               * Fires once the dropdown is no longer visible.\n               * @event Dropdown#hide\n               */\n\n              this.$element.trigger('hide.zf.dropdown', [this.$element]);\n\n              if (this.options.trapFocus) {\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].releaseFocus(this.$element);\n              }\n            }\n            /**\n             * Toggles the dropdown pane's visibility.\n             * @function\n             */\n\n          }, {\n            key: \"toggle\",\n            value: function toggle() {\n              if (this.$element.hasClass('is-open')) {\n                if (this.$anchors.data('hover')) return;\n                this.close();\n              } else {\n                this.open();\n              }\n            }\n            /**\n             * Destroys the dropdown.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.off('.zf.trigger').hide();\n              this.$anchors.off('.zf.dropdown');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body).off('click.zf.dropdown');\n            }\n          }]);\n\n          return Dropdown;\n        }(_foundation_positionable__WEBPACK_IMPORTED_MODULE_3__[\"Positionable\"]);\n\n        Dropdown.defaults = {\n          /**\n           * Class that designates bounding container of Dropdown (default: window)\n           * @option\n           * @type {?string}\n           * @default null\n           */\n          parentClass: null,\n\n          /**\n           * Amount of time to delay opening a submenu on hover event.\n           * @option\n           * @type {number}\n           * @default 250\n           */\n          hoverDelay: 250,\n\n          /**\n           * Allow submenus to open on hover events\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          hover: false,\n\n          /**\n           * Don't close dropdown when hovering over dropdown pane\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          hoverPane: false,\n\n          /**\n           * Number of pixels between the dropdown pane and the triggering element on open.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          vOffset: 0,\n\n          /**\n           * Number of pixels between the dropdown pane and the triggering element on open.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          hOffset: 0,\n\n          /**\n           * Position of dropdown. Can be left, right, bottom, top, or auto.\n           * @option\n           * @type {string}\n           * @default 'auto'\n           */\n          position: 'auto',\n\n          /**\n           * Alignment of dropdown relative to anchor. Can be left, right, bottom, top, center, or auto.\n           * @option\n           * @type {string}\n           * @default 'auto'\n           */\n          alignment: 'auto',\n\n          /**\n           * Allow overlap of container/window. If false, dropdown will first try to position as defined by data-position and data-alignment, but reposition if it would cause an overflow.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          allowOverlap: false,\n\n          /**\n           * Allow overlap of only the bottom of the container. This is the most common\n           * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n           * screen but not otherwise influence or break out of the container.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          allowBottomOverlap: true,\n\n          /**\n           * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          trapFocus: false,\n\n          /**\n           * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          autoFocus: false,\n\n          /**\n           * Allows a click on the body to close the dropdown.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          closeOnClick: false\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.dropdownMenu.js\":\n      /*!***************************************!*\\\n        !*** ./js/foundation.dropdownMenu.js ***!\n        \\***************************************/\n\n      /*! exports provided: DropdownMenu */\n\n      /***/\n      function jsFoundationDropdownMenuJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"DropdownMenu\", function () {\n          return DropdownMenu;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.util.nest */\n        \"./js/foundation.util.nest.js\");\n        /* harmony import */\n\n\n        var _foundation_util_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.util.box */\n        \"./js/foundation.util.box.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * DropdownMenu module.\n         * @module foundation.dropdown-menu\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.box\n         * @requires foundation.util.nest\n         */\n\n\n        var DropdownMenu =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(DropdownMenu, _Plugin);\n\n          function DropdownMenu() {\n            _classCallCheck(this, DropdownMenu);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(DropdownMenu).apply(this, arguments));\n          }\n\n          _createClass(DropdownMenu, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of DropdownMenu.\n             * @class\n             * @name DropdownMenu\n             * @fires DropdownMenu#init\n             * @param {jQuery} element - jQuery object to make into a dropdown menu.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, DropdownMenu.defaults, this.$element.data(), options);\n              this.className = 'DropdownMenu'; // ie9 back compat\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__[\"Keyboard\"].register('DropdownMenu', {\n                'ENTER': 'open',\n                'SPACE': 'open',\n                'ARROW_RIGHT': 'next',\n                'ARROW_UP': 'up',\n                'ARROW_DOWN': 'down',\n                'ARROW_LEFT': 'previous',\n                'ESCAPE': 'close'\n              });\n            }\n            /**\n             * Initializes the plugin, and calls _prepareMenu\n             * @private\n             * @function\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_nest__WEBPACK_IMPORTED_MODULE_4__[\"Nest\"].Feather(this.$element, 'dropdown');\n\n              var subs = this.$element.find('li.is-dropdown-submenu-parent');\n              this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');\n              this.$menuItems = this.$element.find('[role=\"menuitem\"]');\n              this.$tabs = this.$element.children('[role=\"menuitem\"]');\n              this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);\n\n              if (this.options.alignment === 'auto') {\n                if (this.$element.hasClass(this.options.rightClass) || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"rtl\"])() || this.$element.parents('.top-bar-right').is('*')) {\n                  this.options.alignment = 'right';\n                  subs.addClass('opens-left');\n                } else {\n                  this.options.alignment = 'left';\n                  subs.addClass('opens-right');\n                }\n              } else {\n                if (this.options.alignment === 'right') {\n                  subs.addClass('opens-left');\n                } else {\n                  subs.addClass('opens-right');\n                }\n              }\n\n              this.changed = false;\n\n              this._events();\n            }\n          }, {\n            key: \"_isVertical\",\n            value: function _isVertical() {\n              return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column';\n            }\n          }, {\n            key: \"_isRtl\",\n            value: function _isRtl() {\n              return this.$element.hasClass('align-right') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"rtl\"])() && !this.$element.hasClass('align-left');\n            }\n            /**\n             * Adds event listeners to elements within the menu\n             * @private\n             * @function\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this,\n                  hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined',\n                  parClass = 'is-dropdown-submenu-parent'; // used for onClick and in the keyboard handlers\n\n\n              var handleClickFn = function handleClickFn(e) {\n                var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).parentsUntil('ul', \".\".concat(parClass)),\n                    hasSub = $elem.hasClass(parClass),\n                    hasClicked = $elem.attr('data-is-click') === 'true',\n                    $sub = $elem.children('.is-dropdown-submenu');\n\n                if (hasSub) {\n                  if (hasClicked) {\n                    if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) {\n                      return;\n                    } else {\n                      e.stopImmediatePropagation();\n                      e.preventDefault();\n\n                      _this._hide($elem);\n                    }\n                  } else {\n                    e.preventDefault();\n                    e.stopImmediatePropagation();\n\n                    _this._show($sub);\n\n                    $elem.add($elem.parentsUntil(_this.$element, \".\".concat(parClass))).attr('data-is-click', true);\n                  }\n                }\n              };\n\n              if (this.options.clickOpen || hasTouch) {\n                this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn);\n              } // Handle Leaf element Clicks\n\n\n              if (_this.options.closeOnClickInside) {\n                this.$menuItems.on('click.zf.dropdownmenu', function (e) {\n                  var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                      hasSub = $elem.hasClass(parClass);\n\n                  if (!hasSub) {\n                    _this._hide();\n                  }\n                });\n              }\n\n              if (!this.options.disableHover) {\n                this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) {\n                  var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                      hasSub = $elem.hasClass(parClass);\n\n                  if (hasSub) {\n                    clearTimeout($elem.data('_delay'));\n                    $elem.data('_delay', setTimeout(function () {\n                      _this._show($elem.children('.is-dropdown-submenu'));\n                    }, _this.options.hoverDelay));\n                  }\n                }).on('mouseleave.zf.dropdownMenu', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"ignoreMousedisappear\"])(function (e) {\n                  var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                      hasSub = $elem.hasClass(parClass);\n\n                  if (hasSub && _this.options.autoclose) {\n                    if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) {\n                      return false;\n                    }\n\n                    clearTimeout($elem.data('_delay'));\n                    $elem.data('_delay', setTimeout(function () {\n                      _this._hide($elem);\n                    }, _this.options.closingTime));\n                  }\n                }));\n              }\n\n              this.$menuItems.on('keydown.zf.dropdownmenu', function (e) {\n                var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).parentsUntil('ul', '[role=\"menuitem\"]'),\n                    isTab = _this.$tabs.index($element) > -1,\n                    $elements = isTab ? _this.$tabs : $element.siblings('li').add($element),\n                    $prevElement,\n                    $nextElement;\n                $elements.each(function (i) {\n                  if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) {\n                    $prevElement = $elements.eq(i - 1);\n                    $nextElement = $elements.eq(i + 1);\n                    return;\n                  }\n                });\n\n                var nextSibling = function nextSibling() {\n                  $nextElement.children('a:first').focus();\n                  e.preventDefault();\n                },\n                    prevSibling = function prevSibling() {\n                  $prevElement.children('a:first').focus();\n                  e.preventDefault();\n                },\n                    openSub = function openSub() {\n                  var $sub = $element.children('ul.is-dropdown-submenu');\n\n                  if ($sub.length) {\n                    _this._show($sub);\n\n                    $element.find('li > a:first').focus();\n                    e.preventDefault();\n                  } else {\n                    return;\n                  }\n                },\n                    closeSub = function closeSub() {\n                  //if ($element.is(':first-child')) {\n                  var close = $element.parent('ul').parent('li');\n                  close.children('a:first').focus();\n\n                  _this._hide(close);\n\n                  e.preventDefault(); //}\n                };\n\n                var functions = {\n                  open: openSub,\n                  close: function close() {\n                    _this._hide(_this.$element);\n\n                    _this.$menuItems.eq(0).children('a').focus(); // focus to first element\n\n\n                    e.preventDefault();\n                  },\n                  handled: function handled() {\n                    e.stopImmediatePropagation();\n                  }\n                };\n\n                if (isTab) {\n                  if (_this._isVertical()) {\n                    // vertical menu\n                    if (_this._isRtl()) {\n                      // right aligned\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, {\n                        down: nextSibling,\n                        up: prevSibling,\n                        next: closeSub,\n                        previous: openSub\n                      });\n                    } else {\n                      // left aligned\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, {\n                        down: nextSibling,\n                        up: prevSibling,\n                        next: openSub,\n                        previous: closeSub\n                      });\n                    }\n                  } else {\n                    // horizontal menu\n                    if (_this._isRtl()) {\n                      // right aligned\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, {\n                        next: prevSibling,\n                        previous: nextSibling,\n                        down: openSub,\n                        up: closeSub\n                      });\n                    } else {\n                      // left aligned\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, {\n                        next: nextSibling,\n                        previous: prevSibling,\n                        down: openSub,\n                        up: closeSub\n                      });\n                    }\n                  }\n                } else {\n                  // not tabs -> one sub\n                  if (_this._isRtl()) {\n                    // right aligned\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, {\n                      next: closeSub,\n                      previous: openSub,\n                      down: nextSibling,\n                      up: prevSibling\n                    });\n                  } else {\n                    // left aligned\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, {\n                      next: openSub,\n                      previous: closeSub,\n                      down: nextSibling,\n                      up: prevSibling\n                    });\n                  }\n                }\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__[\"Keyboard\"].handleKey(e, 'DropdownMenu', functions);\n              });\n            }\n            /**\n             * Adds an event handler to the body to close any dropdowns on a click.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_addBodyHandler\",\n            value: function _addBodyHandler() {\n              var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body),\n                  _this = this;\n\n              $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu').on('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) {\n                var $link = _this.$element.find(e.target);\n\n                if ($link.length) {\n                  return;\n                }\n\n                _this._hide();\n\n                $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu');\n              });\n            }\n            /**\n             * Opens a dropdown pane, and checks for collisions first.\n             * @param {jQuery} $sub - ul element that is a submenu to show\n             * @function\n             * @private\n             * @fires Dropdownmenu#show\n             */\n\n          }, {\n            key: \"_show\",\n            value: function _show($sub) {\n              var idx = this.$tabs.index(this.$tabs.filter(function (i, el) {\n                return jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).find($sub).length > 0;\n              }));\n              var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');\n\n              this._hide($sibs, idx);\n\n              $sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active');\n\n              var clear = _foundation_util_box__WEBPACK_IMPORTED_MODULE_5__[\"Box\"].ImNotTouchingYou($sub, null, true);\n\n              if (!clear) {\n                var oldClass = this.options.alignment === 'left' ? '-right' : '-left',\n                    $parentLi = $sub.parent('.is-dropdown-submenu-parent');\n                $parentLi.removeClass(\"opens\".concat(oldClass)).addClass(\"opens-\".concat(this.options.alignment));\n                clear = _foundation_util_box__WEBPACK_IMPORTED_MODULE_5__[\"Box\"].ImNotTouchingYou($sub, null, true);\n\n                if (!clear) {\n                  $parentLi.removeClass(\"opens-\".concat(this.options.alignment)).addClass('opens-inner');\n                }\n\n                this.changed = true;\n              }\n\n              $sub.css('visibility', '');\n\n              if (this.options.closeOnClick) {\n                this._addBodyHandler();\n              }\n              /**\n               * Fires when the new dropdown pane is visible.\n               * @event Dropdownmenu#show\n               */\n\n\n              this.$element.trigger('show.zf.dropdownmenu', [$sub]);\n            }\n            /**\n             * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.\n             * @function\n             * @param {jQuery} $elem - element with a submenu to hide\n             * @param {Number} idx - index of the $tabs collection to hide\n             * @private\n             */\n\n          }, {\n            key: \"_hide\",\n            value: function _hide($elem, idx) {\n              var $toClose;\n\n              if ($elem && $elem.length) {\n                $toClose = $elem;\n              } else if (typeof idx !== 'undefined') {\n                $toClose = this.$tabs.not(function (i, el) {\n                  return i === idx;\n                });\n              } else {\n                $toClose = this.$element;\n              }\n\n              var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;\n\n              if (somethingToClose) {\n                $toClose.find('li.is-active').add($toClose).attr({\n                  'data-is-click': false\n                }).removeClass('is-active');\n                $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');\n\n                if (this.changed || $toClose.find('opens-inner').length) {\n                  var oldClass = this.options.alignment === 'left' ? 'right' : 'left';\n                  $toClose.find('li.is-dropdown-submenu-parent').add($toClose).removeClass(\"opens-inner opens-\".concat(this.options.alignment)).addClass(\"opens-\".concat(oldClass));\n                  this.changed = false;\n                }\n                /**\n                 * Fires when the open menus are closed.\n                 * @event Dropdownmenu#hide\n                 */\n\n\n                this.$element.trigger('hide.zf.dropdownmenu', [$toClose]);\n              }\n            }\n            /**\n             * Destroys the plugin.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$menuItems.off('.zf.dropdownmenu').removeAttr('data-is-click').removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body).off('.zf.dropdownmenu');\n\n              _foundation_util_nest__WEBPACK_IMPORTED_MODULE_4__[\"Nest\"].Burn(this.$element, 'dropdown');\n            }\n          }]);\n\n          return DropdownMenu;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__[\"Plugin\"]);\n        /**\n         * Default settings for plugin\n         */\n\n\n        DropdownMenu.defaults = {\n          /**\n           * Disallows hover events from opening submenus\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          disableHover: false,\n\n          /**\n           * Allow a submenu to automatically close on a mouseleave event, if not clicked open.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          autoclose: true,\n\n          /**\n           * Amount of time to delay opening a submenu on hover event.\n           * @option\n           * @type {number}\n           * @default 50\n           */\n          hoverDelay: 50,\n\n          /**\n           * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          clickOpen: false,\n\n          /**\n           * Amount of time to delay closing a submenu on a mouseleave event.\n           * @option\n           * @type {number}\n           * @default 500\n           */\n          closingTime: 500,\n\n          /**\n           * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`.\n           * @option\n           * @type {string}\n           * @default 'auto'\n           */\n          alignment: 'auto',\n\n          /**\n           * Allow clicks on the body to close any open submenus.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          closeOnClick: true,\n\n          /**\n           * Allow clicks on leaf anchor links to close any open submenus.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          closeOnClickInside: true,\n\n          /**\n           * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.\n           * @option\n           * @type {string}\n           * @default 'vertical'\n           */\n          verticalClass: 'vertical',\n\n          /**\n           * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.\n           * @option\n           * @type {string}\n           * @default 'align-right'\n           */\n          rightClass: 'align-right',\n\n          /**\n           * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          forceFollow: true\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.equalizer.js\":\n      /*!************************************!*\\\n        !*** ./js/foundation.equalizer.js ***!\n        \\************************************/\n\n      /*! exports provided: Equalizer */\n\n      /***/\n      function jsFoundationEqualizerJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Equalizer\", function () {\n          return Equalizer;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.imageLoader */\n        \"./js/foundation.util.imageLoader.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Equalizer module.\n         * @module foundation.equalizer\n         * @requires foundation.util.mediaQuery\n         * @requires foundation.util.imageLoader if equalizer contains images\n         */\n\n\n        var Equalizer =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Equalizer, _Plugin);\n\n          function Equalizer() {\n            _classCallCheck(this, Equalizer);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Equalizer).apply(this, arguments));\n          }\n\n          _createClass(Equalizer, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of Equalizer.\n             * @class\n             * @name Equalizer\n             * @fires Equalizer#init\n             * @param {Object} element - jQuery object to add the trigger to.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Equalizer.defaults, this.$element.data(), options);\n              this.className = 'Equalizer'; // ie9 back compat\n\n              this._init();\n            }\n            /**\n             * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load.\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var eqId = this.$element.attr('data-equalizer') || '';\n              var $watched = this.$element.find(\"[data-equalizer-watch=\\\"\".concat(eqId, \"\\\"]\"));\n\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"]._init();\n\n              this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]');\n              this.$element.attr('data-resize', eqId || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"GetYoDigits\"])(6, 'eq'));\n              this.$element.attr('data-mutate', eqId || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"GetYoDigits\"])(6, 'eq'));\n              this.hasNested = this.$element.find('[data-equalizer]').length > 0;\n              this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0;\n              this.isOn = false;\n              this._bindHandler = {\n                onResizeMeBound: this._onResizeMe.bind(this),\n                onPostEqualizedBound: this._onPostEqualized.bind(this)\n              };\n              var imgs = this.$element.find('img');\n              var tooSmall;\n\n              if (this.options.equalizeOn) {\n                tooSmall = this._checkMQ();\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._checkMQ.bind(this));\n              } else {\n                this._events();\n              }\n\n              if (typeof tooSmall !== 'undefined' && tooSmall === false || typeof tooSmall === 'undefined') {\n                if (imgs.length) {\n                  Object(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_2__[\"onImagesLoaded\"])(imgs, this._reflow.bind(this));\n                } else {\n                  this._reflow();\n                }\n              }\n            }\n            /**\n             * Removes event listeners if the breakpoint is too small.\n             * @private\n             */\n\n          }, {\n            key: \"_pauseEvents\",\n            value: function _pauseEvents() {\n              this.isOn = false;\n              this.$element.off({\n                '.zf.equalizer': this._bindHandler.onPostEqualizedBound,\n                'resizeme.zf.trigger': this._bindHandler.onResizeMeBound,\n                'mutateme.zf.trigger': this._bindHandler.onResizeMeBound\n              });\n            }\n            /**\n             * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound\n             * @private\n             */\n\n          }, {\n            key: \"_onResizeMe\",\n            value: function _onResizeMe(e) {\n              this._reflow();\n            }\n            /**\n             * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound\n             * @private\n             */\n\n          }, {\n            key: \"_onPostEqualized\",\n            value: function _onPostEqualized(e) {\n              if (e.target !== this.$element[0]) {\n                this._reflow();\n              }\n            }\n            /**\n             * Initializes events for Equalizer.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this;\n\n              this._pauseEvents();\n\n              if (this.hasNested) {\n                this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound);\n              } else {\n                this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound);\n                this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound);\n              }\n\n              this.isOn = true;\n            }\n            /**\n             * Checks the current breakpoint to the minimum required size.\n             * @private\n             */\n\n          }, {\n            key: \"_checkMQ\",\n            value: function _checkMQ() {\n              var tooSmall = !_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].is(this.options.equalizeOn);\n\n              if (tooSmall) {\n                if (this.isOn) {\n                  this._pauseEvents();\n\n                  this.$watched.css('height', 'auto');\n                }\n              } else {\n                if (!this.isOn) {\n                  this._events();\n                }\n              }\n\n              return tooSmall;\n            }\n            /**\n             * A noop version for the plugin\n             * @private\n             */\n\n          }, {\n            key: \"_killswitch\",\n            value: function _killswitch() {\n              return;\n            }\n            /**\n             * Calls necessary functions to update Equalizer upon DOM change\n             * @private\n             */\n\n          }, {\n            key: \"_reflow\",\n            value: function _reflow() {\n              if (!this.options.equalizeOnStack) {\n                if (this._isStacked()) {\n                  this.$watched.css('height', 'auto');\n                  return false;\n                }\n              }\n\n              if (this.options.equalizeByRow) {\n                this.getHeightsByRow(this.applyHeightByRow.bind(this));\n              } else {\n                this.getHeights(this.applyHeight.bind(this));\n              }\n            }\n            /**\n             * Manually determines if the first 2 elements are *NOT* stacked.\n             * @private\n             */\n\n          }, {\n            key: \"_isStacked\",\n            value: function _isStacked() {\n              if (!this.$watched[0] || !this.$watched[1]) {\n                return true;\n              }\n\n              return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top;\n            }\n            /**\n             * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n             * @param {Function} cb - A non-optional callback to return the heights array to.\n             * @returns {Array} heights - An array of heights of children within Equalizer container\n             */\n\n          }, {\n            key: \"getHeights\",\n            value: function getHeights(cb) {\n              var heights = [];\n\n              for (var i = 0, len = this.$watched.length; i < len; i++) {\n                this.$watched[i].style.height = 'auto';\n                heights.push(this.$watched[i].offsetHeight);\n              }\n\n              cb(heights);\n            }\n            /**\n             * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n             * @param {Function} cb - A non-optional callback to return the heights array to.\n             * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n             */\n\n          }, {\n            key: \"getHeightsByRow\",\n            value: function getHeightsByRow(cb) {\n              var lastElTopOffset = this.$watched.length ? this.$watched.first().offset().top : 0,\n                  groups = [],\n                  group = 0; //group by Row\n\n              groups[group] = [];\n\n              for (var i = 0, len = this.$watched.length; i < len; i++) {\n                this.$watched[i].style.height = 'auto'; //maybe could use this.$watched[i].offsetTop\n\n                var elOffsetTop = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$watched[i]).offset().top;\n\n                if (elOffsetTop != lastElTopOffset) {\n                  group++;\n                  groups[group] = [];\n                  lastElTopOffset = elOffsetTop;\n                }\n\n                groups[group].push([this.$watched[i], this.$watched[i].offsetHeight]);\n              }\n\n              for (var j = 0, ln = groups.length; j < ln; j++) {\n                var heights = jquery__WEBPACK_IMPORTED_MODULE_0___default()(groups[j]).map(function () {\n                  return this[1];\n                }).get();\n                var max = Math.max.apply(null, heights);\n                groups[j].push(max);\n              }\n\n              cb(groups);\n            }\n            /**\n             * Changes the CSS height property of each child in an Equalizer parent to match the tallest\n             * @param {array} heights - An array of heights of children within Equalizer container\n             * @fires Equalizer#preequalized\n             * @fires Equalizer#postequalized\n             */\n\n          }, {\n            key: \"applyHeight\",\n            value: function applyHeight(heights) {\n              var max = Math.max.apply(null, heights);\n              /**\n               * Fires before the heights are applied\n               * @event Equalizer#preequalized\n               */\n\n              this.$element.trigger('preequalized.zf.equalizer');\n              this.$watched.css('height', max);\n              /**\n               * Fires when the heights have been applied\n               * @event Equalizer#postequalized\n               */\n\n              this.$element.trigger('postequalized.zf.equalizer');\n            }\n            /**\n             * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row\n             * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n             * @fires Equalizer#preequalized\n             * @fires Equalizer#preequalizedrow\n             * @fires Equalizer#postequalizedrow\n             * @fires Equalizer#postequalized\n             */\n\n          }, {\n            key: \"applyHeightByRow\",\n            value: function applyHeightByRow(groups) {\n              /**\n               * Fires before the heights are applied\n               */\n              this.$element.trigger('preequalized.zf.equalizer');\n\n              for (var i = 0, len = groups.length; i < len; i++) {\n                var groupsILength = groups[i].length,\n                    max = groups[i][groupsILength - 1];\n\n                if (groupsILength <= 2) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(groups[i][0][0]).css({\n                    'height': 'auto'\n                  });\n                  continue;\n                }\n                /**\n                  * Fires before the heights per row are applied\n                  * @event Equalizer#preequalizedrow\n                  */\n\n\n                this.$element.trigger('preequalizedrow.zf.equalizer');\n\n                for (var j = 0, lenJ = groupsILength - 1; j < lenJ; j++) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(groups[i][j][0]).css({\n                    'height': max\n                  });\n                }\n                /**\n                  * Fires when the heights per row have been applied\n                  * @event Equalizer#postequalizedrow\n                  */\n\n\n                this.$element.trigger('postequalizedrow.zf.equalizer');\n              }\n              /**\n               * Fires when the heights have been applied\n               */\n\n\n              this.$element.trigger('postequalized.zf.equalizer');\n            }\n            /**\n             * Destroys an instance of Equalizer.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this._pauseEvents();\n\n              this.$watched.css('height', 'auto');\n            }\n          }]);\n\n          return Equalizer;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__[\"Plugin\"]);\n        /**\n         * Default settings for plugin\n         */\n\n\n        Equalizer.defaults = {\n          /**\n           * Enable height equalization when stacked on smaller screens.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          equalizeOnStack: false,\n\n          /**\n           * Enable height equalization row by row.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          equalizeByRow: false,\n\n          /**\n           * String representing the minimum breakpoint size the plugin should equalize heights on.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          equalizeOn: ''\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.interchange.js\":\n      /*!**************************************!*\\\n        !*** ./js/foundation.interchange.js ***!\n        \\**************************************/\n\n      /*! exports provided: Interchange */\n\n      /***/\n      function jsFoundationInterchangeJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Interchange\", function () {\n          return Interchange;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Interchange module.\n         * @module foundation.interchange\n         * @requires foundation.util.mediaQuery\n         */\n\n\n        var Interchange =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Interchange, _Plugin);\n\n          function Interchange() {\n            _classCallCheck(this, Interchange);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Interchange).apply(this, arguments));\n          }\n\n          _createClass(Interchange, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of Interchange.\n             * @class\n             * @name Interchange\n             * @fires Interchange#init\n             * @param {Object} element - jQuery object to add the trigger to.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Interchange.defaults, options);\n              this.rules = [];\n              this.currentPath = '';\n              this.className = 'Interchange'; // ie9 back compat\n\n              this._init();\n\n              this._events();\n            }\n            /**\n             * Initializes the Interchange plugin and calls functions to get interchange functioning on load.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"]._init();\n\n              var id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"GetYoDigits\"])(6, 'interchange');\n              this.$element.attr({\n                'data-resize': id,\n                'id': id\n              });\n\n              this._addBreakpoints();\n\n              this._generateRules();\n\n              this._reflow();\n            }\n            /**\n             * Initializes events for Interchange.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this2 = this;\n\n              this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function () {\n                return _this2._reflow();\n              });\n            }\n            /**\n             * Calls necessary functions to update Interchange upon DOM change\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_reflow\",\n            value: function _reflow() {\n              var match; // Iterate through each rule, but only save the last match\n\n              for (var i in this.rules) {\n                if (this.rules.hasOwnProperty(i)) {\n                  var rule = this.rules[i];\n\n                  if (window.matchMedia(rule.query).matches) {\n                    match = rule;\n                  }\n                }\n              }\n\n              if (match) {\n                this.replace(match.path);\n              }\n            }\n            /**\n             * Gets the Foundation breakpoints and adds them to the Interchange.SPECIAL_QUERIES object.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_addBreakpoints\",\n            value: function _addBreakpoints() {\n              for (var i in _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].queries) {\n                if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].queries.hasOwnProperty(i)) {\n                  var query = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].queries[i];\n                  Interchange.SPECIAL_QUERIES[query.name] = query.value;\n                }\n              }\n            }\n            /**\n             * Checks the Interchange element for the provided media query + content pairings\n             * @function\n             * @private\n             * @param {Object} element - jQuery object that is an Interchange instance\n             * @returns {Array} scenarios - Array of objects that have 'mq' and 'path' keys with corresponding keys\n             */\n\n          }, {\n            key: \"_generateRules\",\n            value: function _generateRules(element) {\n              var rulesList = [];\n              var rules;\n\n              if (this.options.rules) {\n                rules = this.options.rules;\n              } else {\n                rules = this.$element.data('interchange');\n              }\n\n              rules = typeof rules === 'string' ? rules.match(/\\[.*?, .*?\\]/g) : rules;\n\n              for (var i in rules) {\n                if (rules.hasOwnProperty(i)) {\n                  var rule = rules[i].slice(1, -1).split(', ');\n                  var path = rule.slice(0, -1).join('');\n                  var query = rule[rule.length - 1];\n\n                  if (Interchange.SPECIAL_QUERIES[query]) {\n                    query = Interchange.SPECIAL_QUERIES[query];\n                  }\n\n                  rulesList.push({\n                    path: path,\n                    query: query\n                  });\n                }\n              }\n\n              this.rules = rulesList;\n            }\n            /**\n             * Update the `src` property of an image, or change the HTML of a container, to the specified path.\n             * @function\n             * @param {String} path - Path to the image or HTML partial.\n             * @fires Interchange#replaced\n             */\n\n          }, {\n            key: \"replace\",\n            value: function replace(path) {\n              if (this.currentPath === path) return;\n\n              var _this = this,\n                  trigger = 'replaced.zf.interchange'; // Replacing images\n\n\n              if (this.$element[0].nodeName === 'IMG') {\n                this.$element.attr('src', path).on('load', function () {\n                  _this.currentPath = path;\n                }).trigger(trigger);\n              } // Replacing background images\n              else if (path.match(/\\.(gif|jpg|jpeg|png|svg|tiff)([?#].*)?/i)) {\n                  path = path.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\n                  this.$element.css({\n                    'background-image': 'url(' + path + ')'\n                  }).trigger(trigger);\n                } // Replacing HTML\n                else {\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default.a.get(path, function (response) {\n                      _this.$element.html(response).trigger(trigger);\n\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default()(response).foundation();\n                      _this.currentPath = path;\n                    });\n                  }\n              /**\n               * Fires when content in an Interchange element is done being loaded.\n               * @event Interchange#replaced\n               */\n              // this.$element.trigger('replaced.zf.interchange');\n\n            }\n            /**\n             * Destroys an instance of interchange.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.off('resizeme.zf.trigger');\n            }\n          }]);\n\n          return Interchange;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__[\"Plugin\"]);\n        /**\n         * Default settings for plugin\n         */\n\n\n        Interchange.defaults = {\n          /**\n           * Rules to be applied to Interchange elements. Set with the `data-interchange` array notation.\n           * @option\n           * @type {?array}\n           * @default null\n           */\n          rules: null\n        };\n        Interchange.SPECIAL_QUERIES = {\n          'landscape': 'screen and (orientation: landscape)',\n          'portrait': 'screen and (orientation: portrait)',\n          'retina': 'only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)'\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.magellan.js\":\n      /*!***********************************!*\\\n        !*** ./js/foundation.magellan.js ***!\n        \\***********************************/\n\n      /*! exports provided: Magellan */\n\n      /***/\n      function jsFoundationMagellanJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Magellan\", function () {\n          return Magellan;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.smoothScroll */\n        \"./js/foundation.smoothScroll.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Magellan module.\n         * @module foundation.magellan\n         * @requires foundation.smoothScroll\n         */\n\n\n        var Magellan =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Magellan, _Plugin);\n\n          function Magellan() {\n            _classCallCheck(this, Magellan);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Magellan).apply(this, arguments));\n          }\n\n          _createClass(Magellan, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of Magellan.\n             * @class\n             * @name Magellan\n             * @fires Magellan#init\n             * @param {Object} element - jQuery object to add the trigger to.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Magellan.defaults, this.$element.data(), options);\n              this.className = 'Magellan'; // ie9 back compat\n\n              this._init();\n\n              this.calcPoints();\n            }\n            /**\n             * Initializes the Magellan plugin and calls functions to get equalizer functioning on load.\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"GetYoDigits\"])(6, 'magellan');\n\n              var _this = this;\n\n              this.$targets = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-magellan-target]');\n              this.$links = this.$element.find('a');\n              this.$element.attr({\n                'data-resize': id,\n                'data-scroll': id,\n                'id': id\n              });\n              this.$active = jquery__WEBPACK_IMPORTED_MODULE_0___default()();\n              this.scrollPos = parseInt(window.pageYOffset, 10);\n\n              this._events();\n            }\n            /**\n             * Calculates an array of pixel values that are the demarcation lines between locations on the page.\n             * Can be invoked if new elements are added or the size of a location changes.\n             * @function\n             */\n\n          }, {\n            key: \"calcPoints\",\n            value: function calcPoints() {\n              var _this = this,\n                  body = document.body,\n                  html = document.documentElement;\n\n              this.points = [];\n              this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight));\n              this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight));\n              this.$targets.each(function () {\n                var $tar = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    pt = Math.round($tar.offset().top - _this.options.threshold);\n                $tar.targetPoint = pt;\n\n                _this.points.push(pt);\n              });\n            }\n            /**\n             * Initializes events for Magellan.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this,\n                  $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body'),\n                  opts = {\n                duration: _this.options.animationDuration,\n                easing: _this.options.animationEasing\n              };\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).one('load', function () {\n                if (_this.options.deepLinking) {\n                  if (location.hash) {\n                    _this.scrollToLoc(location.hash);\n                  }\n                }\n\n                _this.calcPoints();\n\n                _this._updateActive();\n              });\n              _this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n                _this.$element.on({\n                  'resizeme.zf.trigger': _this.reflow.bind(_this),\n                  'scrollme.zf.trigger': _this._updateActive.bind(_this)\n                }).on('click.zf.magellan', 'a[href^=\"#\"]', function (e) {\n                  e.preventDefault();\n                  var arrival = this.getAttribute('href');\n\n                  _this.scrollToLoc(arrival);\n                });\n              });\n\n              this._deepLinkScroll = function (e) {\n                if (_this.options.deepLinking) {\n                  _this.scrollToLoc(window.location.hash);\n                }\n              };\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._deepLinkScroll);\n            }\n            /**\n             * Function to scroll to a given location on the page.\n             * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo'\n             * @function\n             */\n\n          }, {\n            key: \"scrollToLoc\",\n            value: function scrollToLoc(loc) {\n              this._inTransition = true;\n\n              var _this = this;\n\n              var options = {\n                animationEasing: this.options.animationEasing,\n                animationDuration: this.options.animationDuration,\n                threshold: this.options.threshold,\n                offset: this.options.offset\n              };\n\n              _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_3__[\"SmoothScroll\"].scrollToLoc(loc, options, function () {\n                _this._inTransition = false;\n              });\n            }\n            /**\n             * Calls necessary functions to update Magellan upon DOM change\n             * @function\n             */\n\n          }, {\n            key: \"reflow\",\n            value: function reflow() {\n              this.calcPoints();\n\n              this._updateActive();\n            }\n            /**\n             * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled.\n             * @private\n             * @function\n             * @fires Magellan#update\n             */\n\n          }, {\n            key: \"_updateActive\",\n            value: function _updateActive()\n            /*evt, elem, scrollPos*/\n            {\n              var _this2 = this;\n\n              if (this._inTransition) return;\n              var newScrollPos = parseInt(window.pageYOffset, 10);\n              var isScrollingUp = this.scrollPos > newScrollPos;\n              this.scrollPos = newScrollPos;\n              var activeIdx; // Before the first point: no link\n\n              if (newScrollPos < this.points[0]) {}\n              /* do nothing */\n              // At the bottom of the page: last link\n              else if (newScrollPos + this.winHeight === this.docHeight) {\n                  activeIdx = this.points.length - 1;\n                } // Otherwhise, use the last visible link\n                else {\n                    var visibleLinks = this.points.filter(function (p, i) {\n                      return p - _this2.options.offset - (isScrollingUp ? _this2.options.threshold : 0) <= newScrollPos;\n                    });\n                    activeIdx = visibleLinks.length ? visibleLinks.length - 1 : 0;\n                  } // Get the new active link\n\n\n              var $oldActive = this.$active;\n              var activeHash = '';\n\n              if (typeof activeIdx !== 'undefined') {\n                this.$active = this.$links.filter('[href=\"#' + this.$targets.eq(activeIdx).data('magellan-target') + '\"]');\n                if (this.$active.length) activeHash = this.$active[0].getAttribute('href');\n              } else {\n                this.$active = jquery__WEBPACK_IMPORTED_MODULE_0___default()();\n              }\n\n              var isNewActive = !(!this.$active.length && !$oldActive.length) && !this.$active.is($oldActive);\n              var isNewHash = activeHash !== window.location.hash; // Update the active link element\n\n              if (isNewActive) {\n                $oldActive.removeClass(this.options.activeClass);\n                this.$active.addClass(this.options.activeClass);\n              } // Update the hash (it may have changed with the same active link)\n\n\n              if (this.options.deepLinking && isNewHash) {\n                if (window.history.pushState) {\n                  // Set or remove the hash (see: https://stackoverflow.com/a/5298684/4317384\n                  var url = activeHash ? activeHash : window.location.pathname + window.location.search;\n                  window.history.pushState(null, null, url);\n                } else {\n                  window.location.hash = activeHash;\n                }\n              }\n\n              if (isNewActive) {\n                /**\n                 * Fires when magellan is finished updating to the new active element.\n                 * @event Magellan#update\n                 */\n                this.$element.trigger('update.zf.magellan', [this.$active]);\n              }\n            }\n            /**\n             * Destroys an instance of Magellan and resets the url of the window.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.off('.zf.trigger .zf.magellan').find(\".\".concat(this.options.activeClass)).removeClass(this.options.activeClass);\n\n              if (this.options.deepLinking) {\n                var hash = this.$active[0].getAttribute('href');\n                window.location.hash.replace(hash, '');\n              }\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._deepLinkScroll);\n              if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);\n            }\n          }]);\n\n          return Magellan;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__[\"Plugin\"]);\n        /**\n         * Default settings for plugin\n         */\n\n\n        Magellan.defaults = {\n          /**\n           * Amount of time, in ms, the animated scrolling should take between locations.\n           * @option\n           * @type {number}\n           * @default 500\n           */\n          animationDuration: 500,\n\n          /**\n           * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.\n           * @option\n           * @type {string}\n           * @default 'linear'\n           * @see {@link https://api.jquery.com/animate|Jquery animate}\n           */\n          animationEasing: 'linear',\n\n          /**\n           * Number of pixels to use as a marker for location changes.\n           * @option\n           * @type {number}\n           * @default 50\n           */\n          threshold: 50,\n\n          /**\n           * Class applied to the active locations link on the magellan container.\n           * @option\n           * @type {string}\n           * @default 'is-active'\n           */\n          activeClass: 'is-active',\n\n          /**\n           * Allows the script to manipulate the url of the current page, and if supported, alter the history.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          deepLinking: false,\n\n          /**\n           * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          offset: 0\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.offcanvas.js\":\n      /*!************************************!*\\\n        !*** ./js/foundation.offcanvas.js ***!\n        \\************************************/\n\n      /*! exports provided: OffCanvas */\n\n      /***/\n      function jsFoundationOffcanvasJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"OffCanvas\", function () {\n          return OffCanvas;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * OffCanvas module.\n         * @module foundation.offcanvas\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.mediaQuery\n         * @requires foundation.util.triggers\n         */\n\n\n        var OffCanvas =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(OffCanvas, _Plugin);\n\n          function OffCanvas() {\n            _classCallCheck(this, OffCanvas);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(OffCanvas).apply(this, arguments));\n          }\n\n          _createClass(OffCanvas, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of an off-canvas wrapper.\n             * @class\n             * @name OffCanvas\n             * @fires OffCanvas#init\n             * @param {Object} element - jQuery object to initialize.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              var _this2 = this;\n\n              this.className = 'OffCanvas'; // ie9 back compat\n\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, OffCanvas.defaults, this.$element.data(), options);\n              this.contentClasses = {\n                base: [],\n                reveal: []\n              };\n              this.$lastTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()();\n              this.$triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()();\n              this.position = 'left';\n              this.$content = jquery__WEBPACK_IMPORTED_MODULE_0___default()();\n              this.nested = !!this.options.nested; // Defines the CSS transition/position classes of the off-canvas content container.\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(['push', 'overlap']).each(function (index, val) {\n                _this2.contentClasses.base.push('has-transition-' + val);\n              });\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(['left', 'right', 'top', 'bottom']).each(function (index, val) {\n                _this2.contentClasses.base.push('has-position-' + val);\n\n                _this2.contentClasses.reveal.push('has-reveal-' + val);\n              }); // Triggers init is idempotent, just need to make sure it is initialized\n\n              _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_5__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__[\"MediaQuery\"]._init();\n\n              this._init();\n\n              this._events();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].register('OffCanvas', {\n                'ESCAPE': 'close'\n              });\n            }\n            /**\n             * Initializes the off-canvas wrapper by adding the exit overlay (if needed).\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var id = this.$element.attr('id');\n              this.$element.attr('aria-hidden', 'true'); // Find off-canvas content, either by ID (if specified), by siblings or by closest selector (fallback)\n\n              if (this.options.contentId) {\n                this.$content = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#' + this.options.contentId);\n              } else if (this.$element.siblings('[data-off-canvas-content]').length) {\n                this.$content = this.$element.siblings('[data-off-canvas-content]').first();\n              } else {\n                this.$content = this.$element.closest('[data-off-canvas-content]').first();\n              }\n\n              if (!this.options.contentId) {\n                // Assume that the off-canvas element is nested if it isn't a sibling of the content\n                this.nested = this.$element.siblings('[data-off-canvas-content]').length === 0;\n              } else if (this.options.contentId && this.options.nested === null) {\n                // Warning if using content ID without setting the nested option\n                // Once the element is nested it is required to work properly in this case\n                console.warn('Remember to use the nested option if using the content ID option!');\n              }\n\n              if (this.nested === true) {\n                // Force transition overlap if nested\n                this.options.transition = 'overlap'; // Remove appropriate classes if already assigned in markup\n\n                this.$element.removeClass('is-transition-push');\n              }\n\n              this.$element.addClass(\"is-transition-\".concat(this.options.transition, \" is-closed\")); // Find triggers that affect this element and add aria-expanded to them\n\n              this.$triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).find('[data-open=\"' + id + '\"], [data-close=\"' + id + '\"], [data-toggle=\"' + id + '\"]').attr('aria-expanded', 'false').attr('aria-controls', id); // Get position by checking for related CSS class\n\n              this.position = this.$element.is('.position-left, .position-top, .position-right, .position-bottom') ? this.$element.attr('class').match(/position\\-(left|top|right|bottom)/)[1] : this.position; // Add an overlay over the content if necessary\n\n              if (this.options.contentOverlay === true) {\n                var overlay = document.createElement('div');\n                var overlayPosition = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$element).css(\"position\") === 'fixed' ? 'is-overlay-fixed' : 'is-overlay-absolute';\n                overlay.setAttribute('class', 'js-off-canvas-overlay ' + overlayPosition);\n                this.$overlay = jquery__WEBPACK_IMPORTED_MODULE_0___default()(overlay);\n\n                if (overlayPosition === 'is-overlay-fixed') {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$overlay).insertAfter(this.$element);\n                } else {\n                  this.$content.append(this.$overlay);\n                }\n              } // Get the revealOn option from the class.\n\n\n              var revealOnRegExp = new RegExp(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"RegExpEscape\"])(this.options.revealClass) + '([^\\\\s]+)', 'g');\n              var revealOnClass = revealOnRegExp.exec(this.$element[0].className);\n\n              if (revealOnClass) {\n                this.options.isRevealed = true;\n                this.options.revealOn = this.options.revealOn || revealOnClass[1];\n              } // Ensure the `reveal-on-*` class is set.\n\n\n              if (this.options.isRevealed === true && this.options.revealOn) {\n                this.$element.first().addClass(\"\".concat(this.options.revealClass).concat(this.options.revealOn));\n\n                this._setMQChecker();\n              }\n\n              if (this.options.transitionTime) {\n                this.$element.css('transition-duration', this.options.transitionTime);\n              } // Initally remove all transition/position CSS classes from off-canvas content container.\n\n\n              this._removeContentClasses();\n            }\n            /**\n             * Adds event handlers to the off-canvas wrapper and the exit overlay.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              this.$element.off('.zf.trigger .zf.offcanvas').on({\n                'open.zf.trigger': this.open.bind(this),\n                'close.zf.trigger': this.close.bind(this),\n                'toggle.zf.trigger': this.toggle.bind(this),\n                'keydown.zf.offcanvas': this._handleKeyboard.bind(this)\n              });\n\n              if (this.options.closeOnClick === true) {\n                var $target = this.options.contentOverlay ? this.$overlay : this.$content;\n                $target.on({\n                  'click.zf.offcanvas': this.close.bind(this)\n                });\n              }\n            }\n            /**\n             * Applies event listener for elements that will reveal at certain breakpoints.\n             * @private\n             */\n\n          }, {\n            key: \"_setMQChecker\",\n            value: function _setMQChecker() {\n              var _this = this;\n\n              this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n                if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__[\"MediaQuery\"].atLeast(_this.options.revealOn)) {\n                  _this.reveal(true);\n                }\n              });\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', function () {\n                if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__[\"MediaQuery\"].atLeast(_this.options.revealOn)) {\n                  _this.reveal(true);\n                } else {\n                  _this.reveal(false);\n                }\n              });\n            }\n            /**\n             * Removes the CSS transition/position classes of the off-canvas content container.\n             * Removing the classes is important when another off-canvas gets opened that uses the same content container.\n             * @param {Boolean} hasReveal - true if related off-canvas element is revealed.\n             * @private\n             */\n\n          }, {\n            key: \"_removeContentClasses\",\n            value: function _removeContentClasses(hasReveal) {\n              if (typeof hasReveal !== 'boolean') {\n                this.$content.removeClass(this.contentClasses.base.join(' '));\n              } else if (hasReveal === false) {\n                this.$content.removeClass(\"has-reveal-\".concat(this.position));\n              }\n            }\n            /**\n             * Adds the CSS transition/position classes of the off-canvas content container, based on the opening off-canvas element.\n             * Beforehand any transition/position class gets removed.\n             * @param {Boolean} hasReveal - true if related off-canvas element is revealed.\n             * @private\n             */\n\n          }, {\n            key: \"_addContentClasses\",\n            value: function _addContentClasses(hasReveal) {\n              this._removeContentClasses(hasReveal);\n\n              if (typeof hasReveal !== 'boolean') {\n                this.$content.addClass(\"has-transition-\".concat(this.options.transition, \" has-position-\").concat(this.position));\n              } else if (hasReveal === true) {\n                this.$content.addClass(\"has-reveal-\".concat(this.position));\n              }\n            }\n            /**\n             * Handles the revealing/hiding the off-canvas at breakpoints, not the same as open.\n             * @param {Boolean} isRevealed - true if element should be revealed.\n             * @function\n             */\n\n          }, {\n            key: \"reveal\",\n            value: function reveal(isRevealed) {\n              if (isRevealed) {\n                this.close();\n                this.isRevealed = true;\n                this.$element.attr('aria-hidden', 'false');\n                this.$element.off('open.zf.trigger toggle.zf.trigger');\n                this.$element.removeClass('is-closed');\n              } else {\n                this.isRevealed = false;\n                this.$element.attr('aria-hidden', 'true');\n                this.$element.off('open.zf.trigger toggle.zf.trigger').on({\n                  'open.zf.trigger': this.open.bind(this),\n                  'toggle.zf.trigger': this.toggle.bind(this)\n                });\n                this.$element.addClass('is-closed');\n              }\n\n              this._addContentClasses(isRevealed);\n            }\n            /**\n             * Stops scrolling of the body when offcanvas is open on mobile Safari and other troublesome browsers.\n             * @private\n             */\n\n          }, {\n            key: \"_stopScrolling\",\n            value: function _stopScrolling(event) {\n              return false;\n            } // Taken and adapted from http://stackoverflow.com/questions/16889447/prevent-full-page-scrolling-ios\n            // Only really works for y, not sure how to extend to x or if we need to.\n\n          }, {\n            key: \"_recordScrollable\",\n            value: function _recordScrollable(event) {\n              var elem = this; // called from event handler context with this as elem\n              // If the element is scrollable (content overflows), then...\n\n              if (elem.scrollHeight !== elem.clientHeight) {\n                // If we're at the top, scroll down one pixel to allow scrolling up\n                if (elem.scrollTop === 0) {\n                  elem.scrollTop = 1;\n                } // If we're at the bottom, scroll up one pixel to allow scrolling down\n\n\n                if (elem.scrollTop === elem.scrollHeight - elem.clientHeight) {\n                  elem.scrollTop = elem.scrollHeight - elem.clientHeight - 1;\n                }\n              }\n\n              elem.allowUp = elem.scrollTop > 0;\n              elem.allowDown = elem.scrollTop < elem.scrollHeight - elem.clientHeight;\n              elem.lastY = event.originalEvent.pageY;\n            }\n          }, {\n            key: \"_stopScrollPropagation\",\n            value: function _stopScrollPropagation(event) {\n              var elem = this; // called from event handler context with this as elem\n\n              var up = event.pageY < elem.lastY;\n              var down = !up;\n              elem.lastY = event.pageY;\n\n              if (up && elem.allowUp || down && elem.allowDown) {\n                event.stopPropagation();\n              } else {\n                event.preventDefault();\n              }\n            }\n            /**\n             * Opens the off-canvas menu.\n             * @function\n             * @param {Object} event - Event object passed from listener.\n             * @param {jQuery} trigger - element that triggered the off-canvas to open.\n             * @fires Offcanvas#opened\n             * @todo also trigger 'open' event?\n             */\n\n          }, {\n            key: \"open\",\n            value: function open(event, trigger) {\n              if (this.$element.hasClass('is-open') || this.isRevealed) {\n                return;\n              }\n\n              var _this = this;\n\n              if (trigger) {\n                this.$lastTrigger = trigger;\n              }\n\n              if (this.options.forceTo === 'top') {\n                window.scrollTo(0, 0);\n              } else if (this.options.forceTo === 'bottom') {\n                window.scrollTo(0, document.body.scrollHeight);\n              }\n\n              if (this.options.transitionTime && this.options.transition !== 'overlap') {\n                this.$element.siblings('[data-off-canvas-content]').css('transition-duration', this.options.transitionTime);\n              } else {\n                this.$element.siblings('[data-off-canvas-content]').css('transition-duration', '');\n              }\n\n              this.$element.addClass('is-open').removeClass('is-closed');\n              this.$triggers.attr('aria-expanded', 'true');\n              this.$element.attr('aria-hidden', 'false');\n              this.$content.addClass('is-open-' + this.position); // If `contentScroll` is set to false, add class and disable scrolling on touch devices.\n\n              if (this.options.contentScroll === false) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').addClass('is-off-canvas-open').on('touchmove', this._stopScrolling);\n                this.$element.on('touchstart', this._recordScrollable);\n                this.$element.on('touchmove', this._stopScrollPropagation);\n              }\n\n              if (this.options.contentOverlay === true) {\n                this.$overlay.addClass('is-visible');\n              }\n\n              if (this.options.closeOnClick === true && this.options.contentOverlay === true) {\n                this.$overlay.addClass('is-closable');\n              }\n\n              if (this.options.autoFocus === true) {\n                this.$element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"transitionend\"])(this.$element), function () {\n                  if (!_this.$element.hasClass('is-open')) {\n                    return; // exit if prematurely closed\n                  }\n\n                  var canvasFocus = _this.$element.find('[data-autofocus]');\n\n                  if (canvasFocus.length) {\n                    canvasFocus.eq(0).focus();\n                  } else {\n                    _this.$element.find('a, button').eq(0).focus();\n                  }\n                });\n              }\n\n              if (this.options.trapFocus === true) {\n                this.$content.attr('tabindex', '-1');\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].trapFocus(this.$element);\n              }\n\n              this._addContentClasses();\n              /**\n               * Fires when the off-canvas menu opens.\n               * @event Offcanvas#opened\n               */\n\n\n              this.$element.trigger('opened.zf.offcanvas');\n            }\n            /**\n             * Closes the off-canvas menu.\n             * @function\n             * @param {Function} cb - optional cb to fire after closure.\n             * @fires Offcanvas#closed\n             */\n\n          }, {\n            key: \"close\",\n            value: function close(cb) {\n              if (!this.$element.hasClass('is-open') || this.isRevealed) {\n                return;\n              }\n\n              var _this = this;\n\n              this.$element.removeClass('is-open');\n              this.$element.attr('aria-hidden', 'true')\n              /**\n               * Fires when the off-canvas menu opens.\n               * @event Offcanvas#closed\n               */\n              .trigger('closed.zf.offcanvas');\n              this.$content.removeClass('is-open-left is-open-top is-open-right is-open-bottom'); // If `contentScroll` is set to false, remove class and re-enable scrolling on touch devices.\n\n              if (this.options.contentScroll === false) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').removeClass('is-off-canvas-open').off('touchmove', this._stopScrolling);\n                this.$element.off('touchstart', this._recordScrollable);\n                this.$element.off('touchmove', this._stopScrollPropagation);\n              }\n\n              if (this.options.contentOverlay === true) {\n                this.$overlay.removeClass('is-visible');\n              }\n\n              if (this.options.closeOnClick === true && this.options.contentOverlay === true) {\n                this.$overlay.removeClass('is-closable');\n              }\n\n              this.$triggers.attr('aria-expanded', 'false');\n\n              if (this.options.trapFocus === true) {\n                this.$content.removeAttr('tabindex');\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].releaseFocus(this.$element);\n              } // Listen to transitionEnd and add class when done.\n\n\n              this.$element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"transitionend\"])(this.$element), function (e) {\n                _this.$element.addClass('is-closed');\n\n                _this._removeContentClasses();\n              });\n            }\n            /**\n             * Toggles the off-canvas menu open or closed.\n             * @function\n             * @param {Object} event - Event object passed from listener.\n             * @param {jQuery} trigger - element that triggered the off-canvas to open.\n             */\n\n          }, {\n            key: \"toggle\",\n            value: function toggle(event, trigger) {\n              if (this.$element.hasClass('is-open')) {\n                this.close(event, trigger);\n              } else {\n                this.open(event, trigger);\n              }\n            }\n            /**\n             * Handles keyboard input when detected. When the escape key is pressed, the off-canvas menu closes, and focus is restored to the element that opened the menu.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_handleKeyboard\",\n            value: function _handleKeyboard(e) {\n              var _this3 = this;\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].handleKey(e, 'OffCanvas', {\n                close: function close() {\n                  _this3.close();\n\n                  _this3.$lastTrigger.focus();\n\n                  return true;\n                },\n                handled: function handled() {\n                  e.stopPropagation();\n                  e.preventDefault();\n                }\n              });\n            }\n            /**\n             * Destroys the offcanvas plugin.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.close();\n              this.$element.off('.zf.trigger .zf.offcanvas');\n              this.$overlay.off('.zf.offcanvas');\n              if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);\n            }\n          }]);\n\n          return OffCanvas;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__[\"Plugin\"]);\n\n        OffCanvas.defaults = {\n          /**\n           * Allow the user to click outside of the menu to close it.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          closeOnClick: true,\n\n          /**\n           * Adds an overlay on top of `[data-off-canvas-content]`.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          contentOverlay: true,\n\n          /**\n           * Target an off-canvas content container by ID that may be placed anywhere. If null the closest content container will be taken.\n           * @option\n           * @type {?string}\n           * @default null\n           */\n          contentId: null,\n\n          /**\n           * Define the off-canvas element is nested in an off-canvas content. This is required when using the contentId option for a nested element.\n           * @option\n           * @type {boolean}\n           * @default null\n           */\n          nested: null,\n\n          /**\n           * Enable/disable scrolling of the main content when an off canvas panel is open.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          contentScroll: true,\n\n          /**\n           * Amount of time in ms the open and close transition requires. If none selected, pulls from body style.\n           * @option\n           * @type {number}\n           * @default null\n           */\n          transitionTime: null,\n\n          /**\n           * Type of transition for the offcanvas menu. Options are 'push', 'detached' or 'slide'.\n           * @option\n           * @type {string}\n           * @default push\n           */\n          transition: 'push',\n\n          /**\n           * Force the page to scroll to top or bottom on open.\n           * @option\n           * @type {?string}\n           * @default null\n           */\n          forceTo: null,\n\n          /**\n           * Allow the offcanvas to remain open for certain breakpoints.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          isRevealed: false,\n\n          /**\n           * Breakpoint at which to reveal. JS will use a RegExp to target standard classes, if changing classnames, pass your class with the `revealClass` option.\n           * @option\n           * @type {?string}\n           * @default null\n           */\n          revealOn: null,\n\n          /**\n           * Force focus to the offcanvas on open. If true, will focus the opening trigger on close.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          autoFocus: true,\n\n          /**\n           * Class used to force an offcanvas to remain open. Foundation defaults for this are `reveal-for-large` & `reveal-for-medium`.\n           * @option\n           * @type {string}\n           * @default reveal-for-\n           * @todo improve the regex testing for this.\n           */\n          revealClass: 'reveal-for-',\n\n          /**\n           * Triggers optional focus trapping when opening an offcanvas. Sets tabindex of [data-off-canvas-content] to -1 for accessibility purposes.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          trapFocus: false\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.orbit.js\":\n      /*!********************************!*\\\n        !*** ./js/foundation.orbit.js ***!\n        \\********************************/\n\n      /*! exports provided: Orbit */\n\n      /***/\n      function jsFoundationOrbitJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Orbit\", function () {\n          return Orbit;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.motion */\n        \"./js/foundation.util.motion.js\");\n        /* harmony import */\n\n\n        var _foundation_util_timer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.util.timer */\n        \"./js/foundation.util.timer.js\");\n        /* harmony import */\n\n\n        var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.util.imageLoader */\n        \"./js/foundation.util.imageLoader.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\n        /*! ./foundation.util.touch */\n        \"./js/foundation.util.touch.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Orbit module.\n         * @module foundation.orbit\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.motion\n         * @requires foundation.util.timer\n         * @requires foundation.util.imageLoader\n         * @requires foundation.util.touch\n         */\n\n\n        var Orbit =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Orbit, _Plugin);\n\n          function Orbit() {\n            _classCallCheck(this, Orbit);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Orbit).apply(this, arguments));\n          }\n\n          _createClass(Orbit, [{\n            key: \"_setup\",\n\n            /**\n            * Creates a new instance of an orbit carousel.\n            * @class\n            * @name Orbit\n            * @param {jQuery} element - jQuery object to make into an Orbit Carousel.\n            * @param {Object} options - Overrides to the default plugin settings.\n            */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Orbit.defaults, this.$element.data(), options);\n              this.className = 'Orbit'; // ie9 back compat\n\n              _foundation_util_touch__WEBPACK_IMPORTED_MODULE_7__[\"Touch\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); // Touch init is idempotent, we just need to make sure it's initialied.\n\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].register('Orbit', {\n                'ltr': {\n                  'ARROW_RIGHT': 'next',\n                  'ARROW_LEFT': 'previous'\n                },\n                'rtl': {\n                  'ARROW_LEFT': 'next',\n                  'ARROW_RIGHT': 'previous'\n                }\n              });\n            }\n            /**\n            * Initializes the plugin by creating jQuery collections, setting attributes, and starting the animation.\n            * @function\n            * @private\n            */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              // @TODO: consider discussion on PR #9278 about DOM pollution by changeSlide\n              this._reset();\n\n              this.$wrapper = this.$element.find(\".\".concat(this.options.containerClass));\n              this.$slides = this.$element.find(\".\".concat(this.options.slideClass));\n              var $images = this.$element.find('img'),\n                  initActive = this.$slides.filter('.is-active'),\n                  id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_5__[\"GetYoDigits\"])(6, 'orbit');\n              this.$element.attr({\n                'data-resize': id,\n                'id': id\n              });\n\n              if (!initActive.length) {\n                this.$slides.eq(0).addClass('is-active');\n              }\n\n              if (!this.options.useMUI) {\n                this.$slides.addClass('no-motionui');\n              }\n\n              if ($images.length) {\n                Object(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__[\"onImagesLoaded\"])($images, this._prepareForOrbit.bind(this));\n              } else {\n                this._prepareForOrbit(); //hehe\n\n              }\n\n              if (this.options.bullets) {\n                this._loadBullets();\n              }\n\n              this._events();\n\n              if (this.options.autoPlay && this.$slides.length > 1) {\n                this.geoSync();\n              }\n\n              if (this.options.accessible) {\n                // allow wrapper to be focusable to enable arrow navigation\n                this.$wrapper.attr('tabindex', 0);\n              }\n            }\n            /**\n            * Creates a jQuery collection of bullets, if they are being used.\n            * @function\n            * @private\n            */\n\n          }, {\n            key: \"_loadBullets\",\n            value: function _loadBullets() {\n              this.$bullets = this.$element.find(\".\".concat(this.options.boxOfBullets)).find('button');\n            }\n            /**\n            * Sets a `timer` object on the orbit, and starts the counter for the next slide.\n            * @function\n            */\n\n          }, {\n            key: \"geoSync\",\n            value: function geoSync() {\n              var _this = this;\n\n              this.timer = new _foundation_util_timer__WEBPACK_IMPORTED_MODULE_3__[\"Timer\"](this.$element, {\n                duration: this.options.timerDelay,\n                infinite: false\n              }, function () {\n                _this.changeSlide(true);\n              });\n              this.timer.start();\n            }\n            /**\n            * Sets wrapper and slide heights for the orbit.\n            * @function\n            * @private\n            */\n\n          }, {\n            key: \"_prepareForOrbit\",\n            value: function _prepareForOrbit() {\n              var _this = this;\n\n              this._setWrapperHeight();\n            }\n            /**\n            * Calulates the height of each slide in the collection, and uses the tallest one for the wrapper height.\n            * @function\n            * @private\n            * @param {Function} cb - a callback function to fire when complete.\n            */\n\n          }, {\n            key: \"_setWrapperHeight\",\n            value: function _setWrapperHeight(cb) {\n              //rewrite this to `for` loop\n              var max = 0,\n                  temp,\n                  counter = 0,\n                  _this = this;\n\n              this.$slides.each(function () {\n                temp = this.getBoundingClientRect().height;\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('data-slide', counter); // hide all slides but the active one\n\n                if (!/mui/g.test(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)[0].className) && _this.$slides.filter('.is-active')[0] !== _this.$slides.eq(counter)[0]) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).css({\n                    'display': 'none'\n                  });\n                }\n\n                max = temp > max ? temp : max;\n                counter++;\n              });\n\n              if (counter === this.$slides.length) {\n                this.$wrapper.css({\n                  'height': max\n                }); //only change the wrapper height property once.\n\n                if (cb) {\n                  cb(max);\n                } //fire callback with max height dimension.\n\n              }\n            }\n            /**\n            * Sets the max-height of each slide.\n            * @function\n            * @private\n            */\n\n          }, {\n            key: \"_setSlideHeight\",\n            value: function _setSlideHeight(height) {\n              this.$slides.each(function () {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).css('max-height', height);\n              });\n            }\n            /**\n            * Adds event listeners to basically everything within the element.\n            * @function\n            * @private\n            */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this; //***************************************\n              //**Now using custom event - thanks to:**\n              //**      Yohai Ararat of Toronto      **\n              //***************************************\n              //\n\n\n              this.$element.off('.resizeme.zf.trigger').on({\n                'resizeme.zf.trigger': this._prepareForOrbit.bind(this)\n              });\n\n              if (this.$slides.length > 1) {\n                if (this.options.swipe) {\n                  this.$slides.off('swipeleft.zf.orbit swiperight.zf.orbit').on('swipeleft.zf.orbit', function (e) {\n                    e.preventDefault();\n\n                    _this.changeSlide(true);\n                  }).on('swiperight.zf.orbit', function (e) {\n                    e.preventDefault();\n\n                    _this.changeSlide(false);\n                  });\n                } //***************************************\n\n\n                if (this.options.autoPlay) {\n                  this.$slides.on('click.zf.orbit', function () {\n                    _this.$element.data('clickedOn', _this.$element.data('clickedOn') ? false : true);\n\n                    _this.timer[_this.$element.data('clickedOn') ? 'pause' : 'start']();\n                  });\n\n                  if (this.options.pauseOnHover) {\n                    this.$element.on('mouseenter.zf.orbit', function () {\n                      _this.timer.pause();\n                    }).on('mouseleave.zf.orbit', function () {\n                      if (!_this.$element.data('clickedOn')) {\n                        _this.timer.start();\n                      }\n                    });\n                  }\n                }\n\n                if (this.options.navButtons) {\n                  var $controls = this.$element.find(\".\".concat(this.options.nextClass, \", .\").concat(this.options.prevClass));\n                  $controls.attr('tabindex', 0) //also need to handle enter/return and spacebar key presses\n                  .on('click.zf.orbit touchend.zf.orbit', function (e) {\n                    e.preventDefault();\n\n                    _this.changeSlide(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).hasClass(_this.options.nextClass));\n                  });\n                }\n\n                if (this.options.bullets) {\n                  this.$bullets.on('click.zf.orbit touchend.zf.orbit', function () {\n                    if (/is-active/g.test(this.className)) {\n                      return false;\n                    } //if this is active, kick out of function.\n\n\n                    var idx = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('slide'),\n                        ltr = idx > _this.$slides.filter('.is-active').data('slide'),\n                        $slide = _this.$slides.eq(idx);\n\n                    _this.changeSlide(ltr, $slide, idx);\n                  });\n                }\n\n                if (this.options.accessible) {\n                  this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function (e) {\n                    // handle keyboard event with keyboard util\n                    _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].handleKey(e, 'Orbit', {\n                      next: function next() {\n                        _this.changeSlide(true);\n                      },\n                      previous: function previous() {\n                        _this.changeSlide(false);\n                      },\n                      handled: function handled() {\n                        // if bullet is focused, make sure focus moves\n                        if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).is(_this.$bullets)) {\n                          _this.$bullets.filter('.is-active').focus();\n                        }\n                      }\n                    });\n                  });\n                }\n              }\n            }\n            /**\n             * Resets Orbit so it can be reinitialized\n             */\n\n          }, {\n            key: \"_reset\",\n            value: function _reset() {\n              // Don't do anything if there are no slides (first run)\n              if (typeof this.$slides == 'undefined') {\n                return;\n              }\n\n              if (this.$slides.length > 1) {\n                // Remove old events\n                this.$element.off('.zf.orbit').find('*').off('.zf.orbit'); // Restart timer if autoPlay is enabled\n\n                if (this.options.autoPlay) {\n                  this.timer.restart();\n                } // Reset all sliddes\n\n\n                this.$slides.each(function (el) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).removeClass('is-active is-active is-in').removeAttr('aria-live').hide();\n                }); // Show the first slide\n\n                this.$slides.first().addClass('is-active').show(); // Triggers when the slide has finished animating\n\n                this.$element.trigger('slidechange.zf.orbit', [this.$slides.first()]); // Select first bullet if bullets are present\n\n                if (this.options.bullets) {\n                  this._updateBullets(0);\n                }\n              }\n            }\n            /**\n            * Changes the current slide to a new one.\n            * @function\n            * @param {Boolean} isLTR - if true the slide moves from right to left, if false the slide moves from left to right.\n            * @param {jQuery} chosenSlide - the jQuery element of the slide to show next, if one is selected.\n            * @param {Number} idx - the index of the new slide in its collection, if one chosen.\n            * @fires Orbit#slidechange\n            */\n\n          }, {\n            key: \"changeSlide\",\n            value: function changeSlide(isLTR, chosenSlide, idx) {\n              if (!this.$slides) {\n                return;\n              } // Don't freak out if we're in the middle of cleanup\n\n\n              var $curSlide = this.$slides.filter('.is-active').eq(0);\n\n              if (/mui/g.test($curSlide[0].className)) {\n                return false;\n              } //if the slide is currently animating, kick out of the function\n\n\n              var $firstSlide = this.$slides.first(),\n                  $lastSlide = this.$slides.last(),\n                  dirIn = isLTR ? 'Right' : 'Left',\n                  dirOut = isLTR ? 'Left' : 'Right',\n                  _this = this,\n                  $newSlide;\n\n              if (!chosenSlide) {\n                //most of the time, this will be auto played or clicked from the navButtons.\n                $newSlide = isLTR ? //if wrapping enabled, check to see if there is a `next` or `prev` sibling, if not, select the first or last slide to fill in. if wrapping not enabled, attempt to select `next` or `prev`, if there's nothing there, the function will kick out on next step. CRAZY NESTED TERNARIES!!!!!\n                this.options.infiniteWrap ? $curSlide.next(\".\".concat(this.options.slideClass)).length ? $curSlide.next(\".\".concat(this.options.slideClass)) : $firstSlide : $curSlide.next(\".\".concat(this.options.slideClass)) : //pick next slide if moving left to right\n                this.options.infiniteWrap ? $curSlide.prev(\".\".concat(this.options.slideClass)).length ? $curSlide.prev(\".\".concat(this.options.slideClass)) : $lastSlide : $curSlide.prev(\".\".concat(this.options.slideClass)); //pick prev slide if moving right to left\n              } else {\n                $newSlide = chosenSlide;\n              }\n\n              if ($newSlide.length) {\n                /**\n                * Triggers before the next slide starts animating in and only if a next slide has been found.\n                * @event Orbit#beforeslidechange\n                */\n                this.$element.trigger('beforeslidechange.zf.orbit', [$curSlide, $newSlide]);\n\n                if (this.options.bullets) {\n                  idx = idx || this.$slides.index($newSlide); //grab index to update bullets\n\n                  this._updateBullets(idx);\n                }\n\n                if (this.options.useMUI && !this.$element.is(':hidden')) {\n                  _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__[\"Motion\"].animateIn($newSlide.addClass('is-active'), this.options[\"animInFrom\".concat(dirIn)], function () {\n                    $newSlide.css({\n                      'display': 'block'\n                    }).attr('aria-live', 'polite');\n                  });\n\n                  _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__[\"Motion\"].animateOut($curSlide.removeClass('is-active'), this.options[\"animOutTo\".concat(dirOut)], function () {\n                    $curSlide.removeAttr('aria-live');\n\n                    if (_this.options.autoPlay && !_this.timer.isPaused) {\n                      _this.timer.restart();\n                    } //do stuff?\n\n                  });\n                } else {\n                  $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide();\n                  $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show();\n\n                  if (this.options.autoPlay && !this.timer.isPaused) {\n                    this.timer.restart();\n                  }\n                }\n                /**\n                * Triggers when the slide has finished animating in.\n                * @event Orbit#slidechange\n                */\n\n\n                this.$element.trigger('slidechange.zf.orbit', [$newSlide]);\n              }\n            }\n            /**\n            * Updates the active state of the bullets, if displayed.\n            * @function\n            * @private\n            * @param {Number} idx - the index of the current slide.\n            */\n\n          }, {\n            key: \"_updateBullets\",\n            value: function _updateBullets(idx) {\n              var $oldBullet = this.$element.find(\".\".concat(this.options.boxOfBullets)).find('.is-active').removeClass('is-active').blur(),\n                  span = $oldBullet.find('span:last').detach(),\n                  $newBullet = this.$bullets.eq(idx).addClass('is-active').append(span);\n            }\n            /**\n            * Destroys the carousel and hides the element.\n            * @function\n            */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.off('.zf.orbit').find('*').off('.zf.orbit').end().hide();\n            }\n          }]);\n\n          return Orbit;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_6__[\"Plugin\"]);\n\n        Orbit.defaults = {\n          /**\n          * Tells the JS to look for and loadBullets.\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          bullets: true,\n\n          /**\n          * Tells the JS to apply event listeners to nav buttons\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          navButtons: true,\n\n          /**\n          * motion-ui animation class to apply\n          * @option\n           * @type {string}\n          * @default 'slide-in-right'\n          */\n          animInFromRight: 'slide-in-right',\n\n          /**\n          * motion-ui animation class to apply\n          * @option\n           * @type {string}\n          * @default 'slide-out-right'\n          */\n          animOutToRight: 'slide-out-right',\n\n          /**\n          * motion-ui animation class to apply\n          * @option\n           * @type {string}\n          * @default 'slide-in-left'\n          *\n          */\n          animInFromLeft: 'slide-in-left',\n\n          /**\n          * motion-ui animation class to apply\n          * @option\n           * @type {string}\n          * @default 'slide-out-left'\n          */\n          animOutToLeft: 'slide-out-left',\n\n          /**\n          * Allows Orbit to automatically animate on page load.\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          autoPlay: true,\n\n          /**\n          * Amount of time, in ms, between slide transitions\n          * @option\n           * @type {number}\n          * @default 5000\n          */\n          timerDelay: 5000,\n\n          /**\n          * Allows Orbit to infinitely loop through the slides\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          infiniteWrap: true,\n\n          /**\n          * Allows the Orbit slides to bind to swipe events for mobile, requires an additional util library\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          swipe: true,\n\n          /**\n          * Allows the timing function to pause animation on hover.\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          pauseOnHover: true,\n\n          /**\n          * Allows Orbit to bind keyboard events to the slider, to animate frames with arrow keys\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          accessible: true,\n\n          /**\n          * Class applied to the container of Orbit\n          * @option\n           * @type {string}\n          * @default 'orbit-container'\n          */\n          containerClass: 'orbit-container',\n\n          /**\n          * Class applied to individual slides.\n          * @option\n           * @type {string}\n          * @default 'orbit-slide'\n          */\n          slideClass: 'orbit-slide',\n\n          /**\n          * Class applied to the bullet container. You're welcome.\n          * @option\n           * @type {string}\n          * @default 'orbit-bullets'\n          */\n          boxOfBullets: 'orbit-bullets',\n\n          /**\n          * Class applied to the `next` navigation button.\n          * @option\n           * @type {string}\n          * @default 'orbit-next'\n          */\n          nextClass: 'orbit-next',\n\n          /**\n          * Class applied to the `previous` navigation button.\n          * @option\n           * @type {string}\n          * @default 'orbit-previous'\n          */\n          prevClass: 'orbit-previous',\n\n          /**\n          * Boolean to flag the js to use motion ui classes or not. Default to true for backwards compatibility.\n          * @option\n           * @type {boolean}\n          * @default true\n          */\n          useMUI: true\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.positionable.js\":\n      /*!***************************************!*\\\n        !*** ./js/foundation.positionable.js ***!\n        \\***************************************/\n\n      /*! exports provided: Positionable */\n\n      /***/\n      function jsFoundationPositionableJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Positionable\", function () {\n          return Positionable;\n        });\n        /* harmony import */\n\n\n        var _foundation_util_box__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! ./foundation.util.box */\n        \"./js/foundation.util.box.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n\n        var POSITIONS = ['left', 'right', 'top', 'bottom'];\n        var VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center'];\n        var HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center'];\n        var ALIGNMENTS = {\n          'left': VERTICAL_ALIGNMENTS,\n          'right': VERTICAL_ALIGNMENTS,\n          'top': HORIZONTAL_ALIGNMENTS,\n          'bottom': HORIZONTAL_ALIGNMENTS\n        };\n\n        function nextItem(item, array) {\n          var currentIdx = array.indexOf(item);\n\n          if (currentIdx === array.length - 1) {\n            return array[0];\n          } else {\n            return array[currentIdx + 1];\n          }\n        }\n\n        var Positionable =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Positionable, _Plugin);\n\n          function Positionable() {\n            _classCallCheck(this, Positionable);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Positionable).apply(this, arguments));\n          }\n\n          _createClass(Positionable, [{\n            key: \"_init\",\n\n            /**\n             * Abstract class encapsulating the tether-like explicit positioning logic\n             * including repositioning based on overlap.\n             * Expects classes to define defaults for vOffset, hOffset, position,\n             * alignment, allowOverlap, and allowBottomOverlap. They can do this by\n             * extending the defaults, or (for now recommended due to the way docs are\n             * generated) by explicitly declaring them.\n             *\n             **/\n            value: function _init() {\n              this.triedPositions = {};\n              this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position;\n              this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment;\n              this.originalPosition = this.position;\n              this.originalAlignment = this.alignment;\n            }\n          }, {\n            key: \"_getDefaultPosition\",\n            value: function _getDefaultPosition() {\n              return 'bottom';\n            }\n          }, {\n            key: \"_getDefaultAlignment\",\n            value: function _getDefaultAlignment() {\n              switch (this.position) {\n                case 'bottom':\n                case 'top':\n                  return Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"rtl\"])() ? 'right' : 'left';\n\n                case 'left':\n                case 'right':\n                  return 'bottom';\n              }\n            }\n            /**\n             * Adjusts the positionable possible positions by iterating through alignments\n             * and positions.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_reposition\",\n            value: function _reposition() {\n              if (this._alignmentsExhausted(this.position)) {\n                this.position = nextItem(this.position, POSITIONS);\n                this.alignment = ALIGNMENTS[this.position][0];\n              } else {\n                this._realign();\n              }\n            }\n            /**\n             * Adjusts the dropdown pane possible positions by iterating through alignments\n             * on the current position.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_realign\",\n            value: function _realign() {\n              this._addTriedPosition(this.position, this.alignment);\n\n              this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position]);\n            }\n          }, {\n            key: \"_addTriedPosition\",\n            value: function _addTriedPosition(position, alignment) {\n              this.triedPositions[position] = this.triedPositions[position] || [];\n              this.triedPositions[position].push(alignment);\n            }\n          }, {\n            key: \"_positionsExhausted\",\n            value: function _positionsExhausted() {\n              var isExhausted = true;\n\n              for (var i = 0; i < POSITIONS.length; i++) {\n                isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]);\n              }\n\n              return isExhausted;\n            }\n          }, {\n            key: \"_alignmentsExhausted\",\n            value: function _alignmentsExhausted(position) {\n              return this.triedPositions[position] && this.triedPositions[position].length == ALIGNMENTS[position].length;\n            } // When we're trying to center, we don't want to apply offset that's going to\n            // take us just off center, so wrap around to return 0 for the appropriate\n            // offset in those alignments.  TODO: Figure out if we want to make this\n            // configurable behavior... it feels more intuitive, especially for tooltips, but\n            // it's possible someone might actually want to start from center and then nudge\n            // slightly off.\n\n          }, {\n            key: \"_getVOffset\",\n            value: function _getVOffset() {\n              return this.options.vOffset;\n            }\n          }, {\n            key: \"_getHOffset\",\n            value: function _getHOffset() {\n              return this.options.hOffset;\n            }\n          }, {\n            key: \"_setPosition\",\n            value: function _setPosition($anchor, $element, $parent) {\n              if ($anchor.attr('aria-expanded') === 'false') {\n                return false;\n              }\n\n              var $eleDims = _foundation_util_box__WEBPACK_IMPORTED_MODULE_0__[\"Box\"].GetDimensions($element),\n                  $anchorDims = _foundation_util_box__WEBPACK_IMPORTED_MODULE_0__[\"Box\"].GetDimensions($anchor);\n\n              if (!this.options.allowOverlap) {\n                // restore original position & alignment before checking overlap\n                this.position = this.originalPosition;\n                this.alignment = this.originalAlignment;\n              }\n\n              $element.offset(_foundation_util_box__WEBPACK_IMPORTED_MODULE_0__[\"Box\"].GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n\n              if (!this.options.allowOverlap) {\n                var overlaps = {};\n                var minOverlap = 100000000; // default coordinates to how we start, in case we can't figure out better\n\n                var minCoordinates = {\n                  position: this.position,\n                  alignment: this.alignment\n                };\n\n                while (!this._positionsExhausted()) {\n                  var overlap = _foundation_util_box__WEBPACK_IMPORTED_MODULE_0__[\"Box\"].OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap);\n\n                  if (overlap === 0) {\n                    return;\n                  }\n\n                  if (overlap < minOverlap) {\n                    minOverlap = overlap;\n                    minCoordinates = {\n                      position: this.position,\n                      alignment: this.alignment\n                    };\n                  }\n\n                  this._reposition();\n\n                  $element.offset(_foundation_util_box__WEBPACK_IMPORTED_MODULE_0__[\"Box\"].GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n                } // If we get through the entire loop, there was no non-overlapping\n                // position available. Pick the version with least overlap.\n\n\n                this.position = minCoordinates.position;\n                this.alignment = minCoordinates.alignment;\n                $element.offset(_foundation_util_box__WEBPACK_IMPORTED_MODULE_0__[\"Box\"].GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n              }\n            }\n          }]);\n\n          return Positionable;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__[\"Plugin\"]);\n\n        Positionable.defaults = {\n          /**\n           * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto.\n           * @option\n           * @type {string}\n           * @default 'auto'\n           */\n          position: 'auto',\n\n          /**\n           * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto.\n           * @option\n           * @type {string}\n           * @default 'auto'\n           */\n          alignment: 'auto',\n\n          /**\n           * Allow overlap of container/window. If false, dropdown positionable first\n           * try to position as defined by data-position and data-alignment, but\n           * reposition if it would cause an overflow.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          allowOverlap: false,\n\n          /**\n           * Allow overlap of only the bottom of the container. This is the most common\n           * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n           * screen but not otherwise influence or break out of the container.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          allowBottomOverlap: true,\n\n          /**\n           * Number of pixels the positionable should be separated vertically from anchor\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          vOffset: 0,\n\n          /**\n           * Number of pixels the positionable should be separated horizontally from anchor\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          hOffset: 0\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.responsiveAccordionTabs.js\":\n      /*!**************************************************!*\\\n        !*** ./js/foundation.responsiveAccordionTabs.js ***!\n        \\**************************************************/\n\n      /*! exports provided: ResponsiveAccordionTabs */\n\n      /***/\n      function jsFoundationResponsiveAccordionTabsJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"ResponsiveAccordionTabs\", function () {\n          return ResponsiveAccordionTabs;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_accordion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.accordion */\n        \"./js/foundation.accordion.js\");\n        /* harmony import */\n\n\n        var _foundation_tabs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.tabs */\n        \"./js/foundation.tabs.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        } // The plugin matches the plugin classes with these plugin instances.\n\n\n        var MenuPlugins = {\n          tabs: {\n            cssClass: 'tabs',\n            plugin: _foundation_tabs__WEBPACK_IMPORTED_MODULE_5__[\"Tabs\"]\n          },\n          accordion: {\n            cssClass: 'accordion',\n            plugin: _foundation_accordion__WEBPACK_IMPORTED_MODULE_4__[\"Accordion\"]\n          }\n        };\n        /**\n         * ResponsiveAccordionTabs module.\n         * @module foundation.responsiveAccordionTabs\n         * @requires foundation.util.motion\n         * @requires foundation.accordion\n         * @requires foundation.tabs\n         */\n\n        var ResponsiveAccordionTabs =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(ResponsiveAccordionTabs, _Plugin);\n\n          function ResponsiveAccordionTabs() {\n            _classCallCheck(this, ResponsiveAccordionTabs);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveAccordionTabs).apply(this, arguments));\n          }\n\n          _createClass(ResponsiveAccordionTabs, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of a responsive accordion tabs.\n             * @class\n             * @name ResponsiveAccordionTabs\n             * @fires ResponsiveAccordionTabs#init\n             * @param {jQuery} element - jQuery object to make into Responsive Accordion Tabs.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element);\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, this.$element.data(), options);\n              this.rules = this.$element.data('responsive-accordion-tabs');\n              this.currentMq = null;\n              this.currentPlugin = null;\n              this.className = 'ResponsiveAccordionTabs'; // ie9 back compat\n\n              if (!this.$element.attr('id')) {\n                this.$element.attr('id', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"GetYoDigits\"])(6, 'responsiveaccordiontabs'));\n              }\n\n              ;\n\n              this._init();\n\n              this._events();\n            }\n            /**\n             * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"]._init(); // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n\n\n              if (typeof this.rules === 'string') {\n                var rulesTree = {}; // Parse rules from \"classes\" pulled from data attribute\n\n                var rules = this.rules.split(' '); // Iterate through every rule found\n\n                for (var i = 0; i < rules.length; i++) {\n                  var rule = rules[i].split('-');\n                  var ruleSize = rule.length > 1 ? rule[0] : 'small';\n                  var rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n                  if (MenuPlugins[rulePlugin] !== null) {\n                    rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n                  }\n                }\n\n                this.rules = rulesTree;\n              }\n\n              this._getAllOptions();\n\n              if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.isEmptyObject(this.rules)) {\n                this._checkMediaQueries();\n              }\n            }\n          }, {\n            key: \"_getAllOptions\",\n            value: function _getAllOptions() {\n              //get all defaults and options\n              var _this = this;\n\n              _this.allOptions = {};\n\n              for (var key in MenuPlugins) {\n                if (MenuPlugins.hasOwnProperty(key)) {\n                  var obj = MenuPlugins[key];\n\n                  try {\n                    var dummyPlugin = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<ul></ul>');\n                    var tmpPlugin = new obj.plugin(dummyPlugin, _this.options);\n\n                    for (var keyKey in tmpPlugin.options) {\n                      if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') {\n                        var objObj = tmpPlugin.options[keyKey];\n                        _this.allOptions[keyKey] = objObj;\n                      }\n                    }\n\n                    tmpPlugin.destroy();\n                  } catch (e) {}\n                }\n              }\n            }\n            /**\n             * Initializes events for the Menu.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              this._changedZfMediaQueryHandler = this._checkMediaQueries.bind(this);\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n            }\n            /**\n             * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_checkMediaQueries\",\n            value: function _checkMediaQueries() {\n              var matchedMq,\n                  _this = this; // Iterate through each rule and find the last matching rule\n\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(this.rules, function (key) {\n                if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].atLeast(key)) {\n                  matchedMq = key;\n                }\n              }); // No match? No dice\n\n              if (!matchedMq) return; // Plugin already initialized? We good\n\n              if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return; // Remove existing plugin-specific CSS classes\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(MenuPlugins, function (key, value) {\n                _this.$element.removeClass(value.cssClass);\n              }); // Add the CSS class for the new plugin\n\n              this.$element.addClass(this.rules[matchedMq].cssClass); // Create an instance of the new plugin\n\n              if (this.currentPlugin) {\n                //don't know why but on nested elements data zfPlugin get's lost\n                if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin', this.storezfData);\n                this.currentPlugin.destroy();\n              }\n\n              this._handleMarkup(this.rules[matchedMq].cssClass);\n\n              this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});\n              this.storezfData = this.currentPlugin.$element.data('zfPlugin');\n            }\n          }, {\n            key: \"_handleMarkup\",\n            value: function _handleMarkup(toSet) {\n              var _this = this,\n                  fromString = 'accordion';\n\n              var $panels = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-tabs-content=' + this.$element.attr('id') + ']');\n              if ($panels.length) fromString = 'tabs';\n\n              if (fromString === toSet) {\n                return;\n              }\n\n              ;\n              var tabsTitle = _this.allOptions.linkClass ? _this.allOptions.linkClass : 'tabs-title';\n              var tabsPanel = _this.allOptions.panelClass ? _this.allOptions.panelClass : 'tabs-panel';\n              this.$element.removeAttr('role');\n              var $liHeads = this.$element.children('.' + tabsTitle + ',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item');\n              var $liHeadsA = $liHeads.children('a').removeClass('accordion-title');\n\n              if (fromString === 'tabs') {\n                $panels = $panels.children('.' + tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby');\n                $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected');\n              } else {\n                $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content');\n              }\n\n              ;\n              $panels.css({\n                display: '',\n                visibility: ''\n              });\n              $liHeads.css({\n                display: '',\n                visibility: ''\n              });\n\n              if (toSet === 'accordion') {\n                $panels.each(function (key, value) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content', '').removeClass('is-active').css({\n                    height: ''\n                  });\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-tabs-content=' + _this.$element.attr('id') + ']').after('<div id=\"tabs-placeholder-' + _this.$element.attr('id') + '\"></div>').detach();\n                  $liHeads.addClass('accordion-item').attr('data-accordion-item', '');\n                  $liHeadsA.addClass('accordion-title');\n                });\n              } else if (toSet === 'tabs') {\n                var $tabsContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-tabs-content=' + _this.$element.attr('id') + ']');\n                var $placeholder = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#tabs-placeholder-' + _this.$element.attr('id'));\n\n                if ($placeholder.length) {\n                  $tabsContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div class=\"tabs-content\"></div>').insertAfter($placeholder).attr('data-tabs-content', _this.$element.attr('id'));\n                  $placeholder.remove();\n                } else {\n                  $tabsContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div class=\"tabs-content\"></div>').insertAfter(_this.$element).attr('data-tabs-content', _this.$element.attr('id'));\n                }\n\n                ;\n                $panels.each(function (key, value) {\n                  var tempValue = jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).appendTo($tabsContent).addClass(tabsPanel);\n                  var hash = $liHeadsA.get(key).hash.slice(1);\n                  var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).attr('id') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"GetYoDigits\"])(6, 'accordion');\n\n                  if (hash !== id) {\n                    if (hash !== '') {\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).attr('id', hash);\n                    } else {\n                      hash = id;\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).attr('id', hash);\n                      jquery__WEBPACK_IMPORTED_MODULE_0___default()($liHeadsA.get(key)).attr('href', jquery__WEBPACK_IMPORTED_MODULE_0___default()($liHeadsA.get(key)).attr('href').replace('#', '') + '#' + hash);\n                    }\n\n                    ;\n                  }\n\n                  ;\n                  var isActive = jquery__WEBPACK_IMPORTED_MODULE_0___default()($liHeads.get(key)).hasClass('is-active');\n\n                  if (isActive) {\n                    tempValue.addClass('is-active');\n                  }\n\n                  ;\n                });\n                $liHeads.addClass(tabsTitle);\n              }\n\n              ;\n            }\n            /**\n             * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              if (this.currentPlugin) this.currentPlugin.destroy();\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n            }\n          }]);\n\n          return ResponsiveAccordionTabs;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__[\"Plugin\"]);\n\n        ResponsiveAccordionTabs.defaults = {};\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.responsiveMenu.js\":\n      /*!*****************************************!*\\\n        !*** ./js/foundation.responsiveMenu.js ***!\n        \\*****************************************/\n\n      /*! exports provided: ResponsiveMenu */\n\n      /***/\n      function jsFoundationResponsiveMenuJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"ResponsiveMenu\", function () {\n          return ResponsiveMenu;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.dropdownMenu */\n        \"./js/foundation.dropdownMenu.js\");\n        /* harmony import */\n\n\n        var _foundation_drilldown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.drilldown */\n        \"./js/foundation.drilldown.js\");\n        /* harmony import */\n\n\n        var _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n        /*! ./foundation.accordionMenu */\n        \"./js/foundation.accordionMenu.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n\n        var MenuPlugins = {\n          dropdown: {\n            cssClass: 'dropdown',\n            plugin: _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_4__[\"DropdownMenu\"]\n          },\n          drilldown: {\n            cssClass: 'drilldown',\n            plugin: _foundation_drilldown__WEBPACK_IMPORTED_MODULE_5__[\"Drilldown\"]\n          },\n          accordion: {\n            cssClass: 'accordion-menu',\n            plugin: _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_6__[\"AccordionMenu\"]\n          }\n        }; // import \"foundation.util.triggers.js\";\n\n        /**\n         * ResponsiveMenu module.\n         * @module foundation.responsiveMenu\n         * @requires foundation.util.triggers\n         * @requires foundation.util.mediaQuery\n         */\n\n        var ResponsiveMenu =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(ResponsiveMenu, _Plugin);\n\n          function ResponsiveMenu() {\n            _classCallCheck(this, ResponsiveMenu);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveMenu).apply(this, arguments));\n          }\n\n          _createClass(ResponsiveMenu, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of a responsive menu.\n             * @class\n             * @name ResponsiveMenu\n             * @fires ResponsiveMenu#init\n             * @param {jQuery} element - jQuery object to make into a dropdown menu.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element);\n              this.rules = this.$element.data('responsive-menu');\n              this.currentMq = null;\n              this.currentPlugin = null;\n              this.className = 'ResponsiveMenu'; // ie9 back compat\n\n              this._init();\n\n              this._events();\n            }\n            /**\n             * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"]._init(); // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n\n\n              if (typeof this.rules === 'string') {\n                var rulesTree = {}; // Parse rules from \"classes\" pulled from data attribute\n\n                var rules = this.rules.split(' '); // Iterate through every rule found\n\n                for (var i = 0; i < rules.length; i++) {\n                  var rule = rules[i].split('-');\n                  var ruleSize = rule.length > 1 ? rule[0] : 'small';\n                  var rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n                  if (MenuPlugins[rulePlugin] !== null) {\n                    rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n                  }\n                }\n\n                this.rules = rulesTree;\n              }\n\n              if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.isEmptyObject(this.rules)) {\n                this._checkMediaQueries();\n              } // Add data-mutate since children may need it.\n\n\n              this.$element.attr('data-mutate', this.$element.attr('data-mutate') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__[\"GetYoDigits\"])(6, 'responsive-menu'));\n            }\n            /**\n             * Initializes events for the Menu.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this;\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', function () {\n                _this._checkMediaQueries();\n              }); // $(window).on('resize.zf.ResponsiveMenu', function() {\n              //   _this._checkMediaQueries();\n              // });\n            }\n            /**\n             * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_checkMediaQueries\",\n            value: function _checkMediaQueries() {\n              var matchedMq,\n                  _this = this; // Iterate through each rule and find the last matching rule\n\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(this.rules, function (key) {\n                if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].atLeast(key)) {\n                  matchedMq = key;\n                }\n              }); // No match? No dice\n\n              if (!matchedMq) return; // Plugin already initialized? We good\n\n              if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return; // Remove existing plugin-specific CSS classes\n\n              jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(MenuPlugins, function (key, value) {\n                _this.$element.removeClass(value.cssClass);\n              }); // Add the CSS class for the new plugin\n\n              this.$element.addClass(this.rules[matchedMq].cssClass); // Create an instance of the new plugin\n\n              if (this.currentPlugin) this.currentPlugin.destroy();\n              this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});\n            }\n            /**\n             * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.currentPlugin.destroy();\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('.zf.ResponsiveMenu');\n            }\n          }]);\n\n          return ResponsiveMenu;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__[\"Plugin\"]);\n\n        ResponsiveMenu.defaults = {};\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.responsiveToggle.js\":\n      /*!*******************************************!*\\\n        !*** ./js/foundation.responsiveToggle.js ***!\n        \\*******************************************/\n\n      /*! exports provided: ResponsiveToggle */\n\n      /***/\n      function jsFoundationResponsiveToggleJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"ResponsiveToggle\", function () {\n          return ResponsiveToggle;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.motion */\n        \"./js/foundation.util.motion.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * ResponsiveToggle module.\n         * @module foundation.responsiveToggle\n         * @requires foundation.util.mediaQuery\n         * @requires foundation.util.motion\n         */\n\n\n        var ResponsiveToggle =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(ResponsiveToggle, _Plugin);\n\n          function ResponsiveToggle() {\n            _classCallCheck(this, ResponsiveToggle);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveToggle).apply(this, arguments));\n          }\n\n          _createClass(ResponsiveToggle, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of Tab Bar.\n             * @class\n             * @name ResponsiveToggle\n             * @fires ResponsiveToggle#init\n             * @param {jQuery} element - jQuery object to attach tab bar functionality to.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element);\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, ResponsiveToggle.defaults, this.$element.data(), options);\n              this.className = 'ResponsiveToggle'; // ie9 back compat\n\n              this._init();\n\n              this._events();\n            }\n            /**\n             * Initializes the tab bar by finding the target element, toggling element, and running update().\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"]._init();\n\n              var targetID = this.$element.data('responsive-toggle');\n\n              if (!targetID) {\n                console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.');\n              }\n\n              this.$targetMenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(targetID));\n              this.$toggler = this.$element.find('[data-toggle]').filter(function () {\n                var target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle');\n                return target === targetID || target === \"\";\n              });\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, this.options, this.$targetMenu.data()); // If they were set, parse the animation classes\n\n              if (this.options.animate) {\n                var input = this.options.animate.split(' ');\n                this.animationIn = input[0];\n                this.animationOut = input[1] || null;\n              }\n\n              this._update();\n            }\n            /**\n             * Adds necessary event handlers for the tab bar to work.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this;\n\n              this._updateMqHandler = this._update.bind(this);\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._updateMqHandler);\n              this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this));\n            }\n            /**\n             * Checks the current media query to determine if the tab bar should be visible or hidden.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_update\",\n            value: function _update() {\n              // Mobile\n              if (!_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].atLeast(this.options.hideFor)) {\n                this.$element.show();\n                this.$targetMenu.hide();\n              } // Desktop\n              else {\n                  this.$element.hide();\n                  this.$targetMenu.show();\n                }\n            }\n            /**\n             * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it.\n             * @function\n             * @fires ResponsiveToggle#toggled\n             */\n\n          }, {\n            key: \"toggleMenu\",\n            value: function toggleMenu() {\n              var _this2 = this;\n\n              if (!_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__[\"MediaQuery\"].atLeast(this.options.hideFor)) {\n                /**\n                 * Fires when the element attached to the tab bar toggles.\n                 * @event ResponsiveToggle#toggled\n                 */\n                if (this.options.animate) {\n                  if (this.$targetMenu.is(':hidden')) {\n                    _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__[\"Motion\"].animateIn(this.$targetMenu, this.animationIn, function () {\n                      _this2.$element.trigger('toggled.zf.responsiveToggle');\n\n                      _this2.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger');\n                    });\n                  } else {\n                    _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__[\"Motion\"].animateOut(this.$targetMenu, this.animationOut, function () {\n                      _this2.$element.trigger('toggled.zf.responsiveToggle');\n                    });\n                  }\n                } else {\n                  this.$targetMenu.toggle(0);\n                  this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger');\n                  this.$element.trigger('toggled.zf.responsiveToggle');\n                }\n              }\n            }\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.off('.zf.responsiveToggle');\n              this.$toggler.off('.zf.responsiveToggle');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('changed.zf.mediaquery', this._updateMqHandler);\n            }\n          }]);\n\n          return ResponsiveToggle;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__[\"Plugin\"]);\n\n        ResponsiveToggle.defaults = {\n          /**\n           * The breakpoint after which the menu is always shown, and the tab bar is hidden.\n           * @option\n           * @type {string}\n           * @default 'medium'\n           */\n          hideFor: 'medium',\n\n          /**\n           * To decide if the toggle should be animated or not.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          animate: false\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.reveal.js\":\n      /*!*********************************!*\\\n        !*** ./js/foundation.reveal.js ***!\n        \\*********************************/\n\n      /*! exports provided: Reveal */\n\n      /***/\n      function jsFoundationRevealJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Reveal\", function () {\n          return Reveal;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.util.motion */\n        \"./js/foundation.util.motion.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n        /*! ./foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n        /* harmony import */\n\n\n        var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\n        /*! ./foundation.util.touch */\n        \"./js/foundation.util.touch.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Reveal module.\n         * @module foundation.reveal\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.triggers\n         * @requires foundation.util.mediaQuery\n         * @requires foundation.util.motion if using animations\n         */\n\n\n        var Reveal =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Reveal, _Plugin);\n\n          function Reveal() {\n            _classCallCheck(this, Reveal);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Reveal).apply(this, arguments));\n          }\n\n          _createClass(Reveal, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of Reveal.\n             * @class\n             * @name Reveal\n             * @param {jQuery} element - jQuery object to use for the modal.\n             * @param {Object} options - optional parameters.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Reveal.defaults, this.$element.data(), options);\n              this.className = 'Reveal'; // ie9 back compat\n\n              this._init(); // Triggers init is idempotent, just need to make sure it is initialized\n\n\n              _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].register('Reveal', {\n                'ESCAPE': 'close'\n              });\n            }\n            /**\n             * Initializes the modal by adding the overlay and close buttons, (if selected).\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var _this2 = this;\n\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__[\"MediaQuery\"]._init();\n\n              this.id = this.$element.attr('id');\n              this.isActive = false;\n              this.cached = {\n                mq: _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__[\"MediaQuery\"].current\n              };\n              this.$anchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-open=\\\"\".concat(this.id, \"\\\"]\")).length ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-open=\\\"\".concat(this.id, \"\\\"]\")) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-toggle=\\\"\".concat(this.id, \"\\\"]\"));\n              this.$anchor.attr({\n                'aria-controls': this.id,\n                'aria-haspopup': true,\n                'tabindex': 0\n              });\n\n              if (this.options.fullScreen || this.$element.hasClass('full')) {\n                this.options.fullScreen = true;\n                this.options.overlay = false;\n              }\n\n              if (this.options.overlay && !this.$overlay) {\n                this.$overlay = this._makeOverlay(this.id);\n              }\n\n              this.$element.attr({\n                'role': 'dialog',\n                'aria-hidden': true,\n                'data-yeti-box': this.id,\n                'data-resize': this.id\n              });\n\n              if (this.$overlay) {\n                this.$element.detach().appendTo(this.$overlay);\n              } else {\n                this.$element.detach().appendTo(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.appendTo));\n                this.$element.addClass('without-overlay');\n              }\n\n              this._events();\n\n              if (this.options.deepLink && window.location.hash === \"#\".concat(this.id)) {\n                this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n                  return _this2.open();\n                });\n              }\n            }\n            /**\n             * Creates an overlay div to display behind the modal.\n             * @private\n             */\n\n          }, {\n            key: \"_makeOverlay\",\n            value: function _makeOverlay() {\n              var additionalOverlayClasses = '';\n\n              if (this.options.additionalOverlayClasses) {\n                additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses;\n              }\n\n              return jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div></div>').addClass('reveal-overlay' + additionalOverlayClasses).appendTo(this.options.appendTo);\n            }\n            /**\n             * Updates position of modal\n             * TODO:  Figure out if we actually need to cache these values or if it doesn't matter\n             * @private\n             */\n\n          }, {\n            key: \"_updatePosition\",\n            value: function _updatePosition() {\n              var width = this.$element.outerWidth();\n              var outerWidth = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).width();\n              var height = this.$element.outerHeight();\n              var outerHeight = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height();\n              var left,\n                  top = null;\n\n              if (this.options.hOffset === 'auto') {\n                left = parseInt((outerWidth - width) / 2, 10);\n              } else {\n                left = parseInt(this.options.hOffset, 10);\n              }\n\n              if (this.options.vOffset === 'auto') {\n                if (height > outerHeight) {\n                  top = parseInt(Math.min(100, outerHeight / 10), 10);\n                } else {\n                  top = parseInt((outerHeight - height) / 4, 10);\n                }\n              } else if (this.options.vOffset !== null) {\n                top = parseInt(this.options.vOffset, 10);\n              }\n\n              if (top !== null) {\n                this.$element.css({\n                  top: top + 'px'\n                });\n              } // only worry about left if we don't have an overlay or we have a horizontal offset,\n              // otherwise we're perfectly in the middle\n\n\n              if (!this.$overlay || this.options.hOffset !== 'auto') {\n                this.$element.css({\n                  left: left + 'px'\n                });\n                this.$element.css({\n                  margin: '0px'\n                });\n              }\n            }\n            /**\n             * Adds event handlers for the modal.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this3 = this;\n\n              var _this = this;\n\n              this.$element.on({\n                'open.zf.trigger': this.open.bind(this),\n                'close.zf.trigger': function closeZfTrigger(event, $element) {\n                  if (event.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target).parents('[data-closable]')[0] === $element) {\n                    // only close reveal when it's explicitly called\n                    return _this3.close.apply(_this3);\n                  }\n                },\n                'toggle.zf.trigger': this.toggle.bind(this),\n                'resizeme.zf.trigger': function resizemeZfTrigger() {\n                  _this._updatePosition();\n                }\n              });\n\n              if (this.options.closeOnClick && this.options.overlay) {\n                this.$overlay.off('.zf.reveal').on('click.zf.reveal', function (e) {\n                  if (e.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(_this.$element[0], e.target) || !jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(document, e.target)) {\n                    return;\n                  }\n\n                  _this.close();\n                });\n              }\n\n              if (this.options.deepLink) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on(\"hashchange.zf.reveal:\".concat(this.id), this._handleState.bind(this));\n              }\n            }\n            /**\n             * Handles modal methods on back/forward button clicks or any other event that triggers hashchange.\n             * @private\n             */\n\n          }, {\n            key: \"_handleState\",\n            value: function _handleState(e) {\n              if (window.location.hash === '#' + this.id && !this.isActive) {\n                this.open();\n              } else {\n                this.close();\n              }\n            }\n            /**\n            * Disables the scroll when Reveal is shown to prevent the background from shifting\n            * @param {number} scrollTop - Scroll to visually apply, window current scroll by default\n            */\n\n          }, {\n            key: \"_disableScroll\",\n            value: function _disableScroll(scrollTop) {\n              scrollTop = scrollTop || jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop();\n\n              if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).height() > jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height()) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"html\").css(\"top\", -scrollTop);\n              }\n            }\n            /**\n            * Reenables the scroll when Reveal closes\n            * @param {number} scrollTop - Scroll to restore, html \"top\" property by default (as set by `_disableScroll`)\n            */\n\n          }, {\n            key: \"_enableScroll\",\n            value: function _enableScroll(scrollTop) {\n              scrollTop = scrollTop || parseInt(jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"html\").css(\"top\"));\n\n              if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).height() > jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height()) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"html\").css(\"top\", \"\");\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop(-scrollTop);\n              }\n            }\n            /**\n             * Opens the modal controlled by `this.$anchor`, and closes all others by default.\n             * @function\n             * @fires Reveal#closeme\n             * @fires Reveal#open\n             */\n\n          }, {\n            key: \"open\",\n            value: function open() {\n              var _this4 = this; // either update or replace browser history\n\n\n              var hash = \"#\".concat(this.id);\n\n              if (this.options.deepLink && window.location.hash !== hash) {\n                if (window.history.pushState) {\n                  if (this.options.updateHistory) {\n                    window.history.pushState({}, '', hash);\n                  } else {\n                    window.history.replaceState({}, '', hash);\n                  }\n                } else {\n                  window.location.hash = hash;\n                }\n              } // Remember anchor that opened it to set focus back later, have general anchors as fallback\n\n\n              this.$activeAnchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.activeElement).is(this.$anchor) ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.activeElement) : this.$anchor;\n              this.isActive = true; // Make elements invisible, but remove display: none so we can get size and positioning\n\n              this.$element.css({\n                'visibility': 'hidden'\n              }).show().scrollTop(0);\n\n              if (this.options.overlay) {\n                this.$overlay.css({\n                  'visibility': 'hidden'\n                }).show();\n              }\n\n              this._updatePosition();\n\n              this.$element.hide().css({\n                'visibility': ''\n              });\n\n              if (this.$overlay) {\n                this.$overlay.css({\n                  'visibility': ''\n                }).hide();\n\n                if (this.$element.hasClass('fast')) {\n                  this.$overlay.addClass('fast');\n                } else if (this.$element.hasClass('slow')) {\n                  this.$overlay.addClass('slow');\n                }\n              }\n\n              if (!this.options.multipleOpened) {\n                /**\n                 * Fires immediately before the modal opens.\n                 * Closes any other modals that are currently open\n                 * @event Reveal#closeme\n                 */\n                this.$element.trigger('closeme.zf.reveal', this.id);\n              }\n\n              this._disableScroll();\n\n              var _this = this; // Motion UI method of reveal\n\n\n              if (this.options.animationIn) {\n                var afterAnimation = function afterAnimation() {\n                  _this.$element.attr({\n                    'aria-hidden': false,\n                    'tabindex': -1\n                  }).focus();\n\n                  _this._addGlobalClasses();\n\n                  _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].trapFocus(_this.$element);\n                };\n\n                if (this.options.overlay) {\n                  _foundation_util_motion__WEBPACK_IMPORTED_MODULE_4__[\"Motion\"].animateIn(this.$overlay, 'fade-in');\n                }\n\n                _foundation_util_motion__WEBPACK_IMPORTED_MODULE_4__[\"Motion\"].animateIn(this.$element, this.options.animationIn, function () {\n                  if (_this4.$element) {\n                    // protect against object having been removed\n                    _this4.focusableElements = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].findFocusable(_this4.$element);\n                    afterAnimation();\n                  }\n                });\n              } // jQuery method of reveal\n              else {\n                  if (this.options.overlay) {\n                    this.$overlay.show(0);\n                  }\n\n                  this.$element.show(this.options.showDelay);\n                } // handle accessibility\n\n\n              this.$element.attr({\n                'aria-hidden': false,\n                'tabindex': -1\n              }).focus();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].trapFocus(this.$element);\n\n              this._addGlobalClasses();\n\n              this._addGlobalListeners();\n              /**\n               * Fires when the modal has successfully opened.\n               * @event Reveal#open\n               */\n\n\n              this.$element.trigger('open.zf.reveal');\n            }\n            /**\n             * Adds classes and listeners on document required by open modals.\n             *\n             * The following classes are added and updated:\n             * - `.is-reveal-open` - Prevents the scroll on document\n             * - `.zf-has-scroll`  - Displays a disabled scrollbar on document if required like if the\n             *                       scroll was not disabled. This prevent a \"shift\" of the page content due\n             *                       the scrollbar disappearing when the modal opens.\n             *\n             * @private\n             */\n\n          }, {\n            key: \"_addGlobalClasses\",\n            value: function _addGlobalClasses() {\n              var updateScrollbarClass = function updateScrollbarClass() {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').toggleClass('zf-has-scroll', !!(jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).height() > jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height()));\n              };\n\n              this.$element.on('resizeme.zf.trigger.revealScrollbarListener', function () {\n                return updateScrollbarClass();\n              });\n              updateScrollbarClass();\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').addClass('is-reveal-open');\n            }\n            /**\n             * Removes classes and listeners on document that were required by open modals.\n             * @private\n             */\n\n          }, {\n            key: \"_removeGlobalClasses\",\n            value: function _removeGlobalClasses() {\n              this.$element.off('resizeme.zf.trigger.revealScrollbarListener');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').removeClass('is-reveal-open');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').removeClass('zf-has-scroll');\n            }\n            /**\n             * Adds extra event handlers for the body and window if necessary.\n             * @private\n             */\n\n          }, {\n            key: \"_addGlobalListeners\",\n            value: function _addGlobalListeners() {\n              var _this = this;\n\n              if (!this.$element) {\n                return;\n              } // If we're in the middle of cleanup, don't freak out\n\n\n              this.focusableElements = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].findFocusable(this.$element);\n\n              if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').on('click.zf.reveal', function (e) {\n                  if (e.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(_this.$element[0], e.target) || !jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(document, e.target)) {\n                    return;\n                  }\n\n                  _this.close();\n                });\n              }\n\n              if (this.options.closeOnEsc) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('keydown.zf.reveal', function (e) {\n                  _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].handleKey(e, 'Reveal', {\n                    close: function close() {\n                      if (_this.options.closeOnEsc) {\n                        _this.close();\n                      }\n                    }\n                  });\n                });\n              }\n            }\n            /**\n             * Closes the modal.\n             * @function\n             * @fires Reveal#closed\n             */\n\n          }, {\n            key: \"close\",\n            value: function close() {\n              if (!this.isActive || !this.$element.is(':visible')) {\n                return false;\n              }\n\n              var _this = this; // Motion UI method of hiding\n\n\n              if (this.options.animationOut) {\n                if (this.options.overlay) {\n                  _foundation_util_motion__WEBPACK_IMPORTED_MODULE_4__[\"Motion\"].animateOut(this.$overlay, 'fade-out');\n                }\n\n                _foundation_util_motion__WEBPACK_IMPORTED_MODULE_4__[\"Motion\"].animateOut(this.$element, this.options.animationOut, finishUp);\n              } // jQuery method of hiding\n              else {\n                  this.$element.hide(this.options.hideDelay);\n\n                  if (this.options.overlay) {\n                    this.$overlay.hide(0, finishUp);\n                  } else {\n                    finishUp();\n                  }\n                } // Conditionals to remove extra event listeners added on open\n\n\n              if (this.options.closeOnEsc) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('keydown.zf.reveal');\n              }\n\n              if (!this.options.overlay && this.options.closeOnClick) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').off('click.zf.reveal');\n              }\n\n              this.$element.off('keydown.zf.reveal');\n\n              function finishUp() {\n                // Get the current top before the modal is closed and restore the scroll after.\n                // TODO: use component properties instead of HTML properties\n                // See https://github.com/zurb/foundation-sites/pull/10786\n                var scrollTop = parseInt(jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"html\").css(\"top\"));\n\n                if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.reveal:visible').length === 0) {\n                  _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n\n                }\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].releaseFocus(_this.$element);\n\n                _this.$element.attr('aria-hidden', true);\n\n                _this._enableScroll(scrollTop);\n                /**\n                * Fires when the modal is done closing.\n                * @event Reveal#closed\n                */\n\n\n                _this.$element.trigger('closed.zf.reveal');\n              }\n              /**\n              * Resets the modal content\n              * This prevents a running video to keep going in the background\n              */\n\n\n              if (this.options.resetOnClose) {\n                this.$element.html(this.$element.html());\n              }\n\n              this.isActive = false; // If deepLink and we did not switched to an other modal...\n\n              if (_this.options.deepLink && window.location.hash === \"#\".concat(this.id)) {\n                // Remove the history hash\n                if (window.history.replaceState) {\n                  var urlWithoutHash = window.location.pathname + window.location.search;\n\n                  if (this.options.updateHistory) {\n                    window.history.pushState({}, '', urlWithoutHash); // remove the hash\n                  } else {\n                    window.history.replaceState('', document.title, urlWithoutHash);\n                  }\n                } else {\n                  window.location.hash = '';\n                }\n              }\n\n              this.$activeAnchor.focus();\n            }\n            /**\n             * Toggles the open/closed state of a modal.\n             * @function\n             */\n\n          }, {\n            key: \"toggle\",\n            value: function toggle() {\n              if (this.isActive) {\n                this.close();\n              } else {\n                this.open();\n              }\n            }\n          }, {\n            key: \"_destroy\",\n\n            /**\n             * Destroys an instance of a modal.\n             * @function\n             */\n            value: function _destroy() {\n              if (this.options.overlay) {\n                this.$element.appendTo(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin()\n\n                this.$overlay.hide().off().remove();\n              }\n\n              this.$element.hide().off();\n              this.$anchor.off('.zf');\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(\".zf.reveal:\".concat(this.id));\n              if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);\n\n              if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.reveal:visible').length === 0) {\n                this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n\n              }\n            }\n          }]);\n\n          return Reveal;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_5__[\"Plugin\"]);\n\n        Reveal.defaults = {\n          /**\n           * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          animationIn: '',\n\n          /**\n           * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          animationOut: '',\n\n          /**\n           * Time, in ms, to delay the opening of a modal after a click if no animation used.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          showDelay: 0,\n\n          /**\n           * Time, in ms, to delay the closing of a modal after a click if no animation used.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          hideDelay: 0,\n\n          /**\n           * Allows a click on the body/overlay to close the modal.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          closeOnClick: true,\n\n          /**\n           * Allows the modal to close if the user presses the `ESCAPE` key.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          closeOnEsc: true,\n\n          /**\n           * If true, allows multiple modals to be displayed at once.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          multipleOpened: false,\n\n          /**\n           * Distance, in pixels, the modal should push down from the top of the screen.\n           * @option\n           * @type {number|string}\n           * @default auto\n           */\n          vOffset: 'auto',\n\n          /**\n           * Distance, in pixels, the modal should push in from the side of the screen.\n           * @option\n           * @type {number|string}\n           * @default auto\n           */\n          hOffset: 'auto',\n\n          /**\n           * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          fullScreen: false,\n\n          /**\n           * Allows the modal to generate an overlay div, which will cover the view when modal opens.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          overlay: true,\n\n          /**\n           * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          resetOnClose: false,\n\n          /**\n           * Link the location hash to the modal.\n           * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          deepLink: false,\n\n          /**\n           * If `deepLink` is enabled, update the browser history with the open modal\n           * @option\n           * @default false\n           */\n          updateHistory: false,\n\n          /**\n          * Allows the modal to append to custom div.\n          * @option\n          * @type {string}\n          * @default \"body\"\n          */\n          appendTo: \"body\",\n\n          /**\n           * Allows adding additional class names to the reveal overlay.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          additionalOverlayClasses: ''\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.slider.js\":\n      /*!*********************************!*\\\n        !*** ./js/foundation.slider.js ***!\n        \\*********************************/\n\n      /*! exports provided: Slider */\n\n      /***/\n      function jsFoundationSliderJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Slider\", function () {\n          return Slider;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.motion */\n        \"./js/foundation.util.motion.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n        /*! ./foundation.util.touch */\n        \"./js/foundation.util.touch.js\");\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n        /*! ./foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Slider module.\n         * @module foundation.slider\n         * @requires foundation.util.motion\n         * @requires foundation.util.triggers\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.touch\n         */\n\n\n        var Slider =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Slider, _Plugin);\n\n          function Slider() {\n            _classCallCheck(this, Slider);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Slider).apply(this, arguments));\n          }\n\n          _createClass(Slider, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of a slider control.\n             * @class\n             * @name Slider\n             * @param {jQuery} element - jQuery object to make into a slider control.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Slider.defaults, this.$element.data(), options);\n              this.className = 'Slider'; // ie9 back compat\n              // Touch and Triggers inits are idempotent, we just need to make sure it's initialied.\n\n              _foundation_util_touch__WEBPACK_IMPORTED_MODULE_5__[\"Touch\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].register('Slider', {\n                'ltr': {\n                  'ARROW_RIGHT': 'increase',\n                  'ARROW_UP': 'increase',\n                  'ARROW_DOWN': 'decrease',\n                  'ARROW_LEFT': 'decrease',\n                  'SHIFT_ARROW_RIGHT': 'increase_fast',\n                  'SHIFT_ARROW_UP': 'increase_fast',\n                  'SHIFT_ARROW_DOWN': 'decrease_fast',\n                  'SHIFT_ARROW_LEFT': 'decrease_fast',\n                  'HOME': 'min',\n                  'END': 'max'\n                },\n                'rtl': {\n                  'ARROW_LEFT': 'increase',\n                  'ARROW_RIGHT': 'decrease',\n                  'SHIFT_ARROW_LEFT': 'increase_fast',\n                  'SHIFT_ARROW_RIGHT': 'decrease_fast'\n                }\n              });\n            }\n            /**\n             * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s).\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              this.inputs = this.$element.find('input');\n              this.handles = this.$element.find('[data-slider-handle]');\n              this.$handle = this.handles.eq(0);\n              this.$input = this.inputs.length ? this.inputs.eq(0) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(this.$handle.attr('aria-controls')));\n              this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0);\n\n              var isDbl = false,\n                  _this = this;\n\n              if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) {\n                this.options.disabled = true;\n                this.$element.addClass(this.options.disabledClass);\n              }\n\n              if (!this.inputs.length) {\n                this.inputs = jquery__WEBPACK_IMPORTED_MODULE_0___default()().add(this.$input);\n                this.options.binding = true;\n              }\n\n              this._setInitAttr(0);\n\n              if (this.handles[1]) {\n                this.options.doubleSided = true;\n                this.$handle2 = this.handles.eq(1);\n                this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(this.$handle2.attr('aria-controls')));\n\n                if (!this.inputs[1]) {\n                  this.inputs = this.inputs.add(this.$input2);\n                }\n\n                isDbl = true; // this.$handle.triggerHandler('click.zf.slider');\n\n                this._setInitAttr(1);\n              } // Set handle positions\n\n\n              this.setHandles();\n\n              this._events();\n            }\n          }, {\n            key: \"setHandles\",\n            value: function setHandles() {\n              var _this2 = this;\n\n              if (this.handles[1]) {\n                this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true, function () {\n                  _this2._setHandlePos(_this2.$handle2, _this2.inputs.eq(1).val(), true);\n                });\n              } else {\n                this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true);\n              }\n            }\n          }, {\n            key: \"_reflow\",\n            value: function _reflow() {\n              this.setHandles();\n            }\n            /**\n            * @function\n            * @private\n            * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value)\n            */\n\n          }, {\n            key: \"_pctOfBar\",\n            value: function _pctOfBar(value) {\n              var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start);\n\n              switch (this.options.positionValueFunction) {\n                case \"pow\":\n                  pctOfBar = this._logTransform(pctOfBar);\n                  break;\n\n                case \"log\":\n                  pctOfBar = this._powTransform(pctOfBar);\n                  break;\n              }\n\n              return pctOfBar.toFixed(2);\n            }\n            /**\n            * @function\n            * @private\n            * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value\n            */\n\n          }, {\n            key: \"_value\",\n            value: function _value(pctOfBar) {\n              switch (this.options.positionValueFunction) {\n                case \"pow\":\n                  pctOfBar = this._powTransform(pctOfBar);\n                  break;\n\n                case \"log\":\n                  pctOfBar = this._logTransform(pctOfBar);\n                  break;\n              }\n\n              var value = (this.options.end - this.options.start) * pctOfBar + parseFloat(this.options.start);\n              return value;\n            }\n            /**\n            * @function\n            * @private\n            * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function\n            */\n\n          }, {\n            key: \"_logTransform\",\n            value: function _logTransform(value) {\n              return baseLog(this.options.nonLinearBase, value * (this.options.nonLinearBase - 1) + 1);\n            }\n            /**\n            * @function\n            * @private\n            * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function\n            */\n\n          }, {\n            key: \"_powTransform\",\n            value: function _powTransform(value) {\n              return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1);\n            }\n            /**\n             * Sets the position of the selected handle and fill bar.\n             * @function\n             * @private\n             * @param {jQuery} $hndl - the selected handle to move.\n             * @param {Number} location - floating point between the start and end values of the slider bar.\n             * @param {Function} cb - callback function to fire on completion.\n             * @fires Slider#moved\n             * @fires Slider#changed\n             */\n\n          }, {\n            key: \"_setHandlePos\",\n            value: function _setHandlePos($hndl, location, noInvert, cb) {\n              // don't move if the slider has been disabled since its initialization\n              if (this.$element.hasClass(this.options.disabledClass)) {\n                return;\n              } //might need to alter that slightly for bars that will have odd number selections.\n\n\n              location = parseFloat(location); //on input change events, convert string to number...grumble.\n              // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max\n\n              if (location < this.options.start) {\n                location = this.options.start;\n              } else if (location > this.options.end) {\n                location = this.options.end;\n              }\n\n              var isDbl = this.options.doubleSided; //this is for single-handled vertical sliders, it adjusts the value to account for the slider being \"upside-down\"\n              //for click and drag events, it's weird due to the scale(-1, 1) css property\n\n              if (this.options.vertical && !noInvert) {\n                location = this.options.end - location;\n              }\n\n              if (isDbl) {\n                //this block is to prevent 2 handles from crossing eachother. Could/should be improved.\n                if (this.handles.index($hndl) === 0) {\n                  var h2Val = parseFloat(this.$handle2.attr('aria-valuenow'));\n                  location = location >= h2Val ? h2Val - this.options.step : location;\n                } else {\n                  var h1Val = parseFloat(this.$handle.attr('aria-valuenow'));\n                  location = location <= h1Val ? h1Val + this.options.step : location;\n                }\n              }\n\n              var _this = this,\n                  vert = this.options.vertical,\n                  hOrW = vert ? 'height' : 'width',\n                  lOrT = vert ? 'top' : 'left',\n                  handleDim = $hndl[0].getBoundingClientRect()[hOrW],\n                  elemDim = this.$element[0].getBoundingClientRect()[hOrW],\n                  //percentage of bar min/max value based on click or drag point\n              pctOfBar = this._pctOfBar(location),\n                  //number of actual pixels to shift the handle, based on the percentage obtained above\n              pxToMove = (elemDim - handleDim) * pctOfBar,\n                  //percentage of bar to shift the handle\n              movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal); //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value\n\n\n              location = parseFloat(location.toFixed(this.options.decimal)); // declare empty object for css adjustments, only used with 2 handled-sliders\n\n              var css = {};\n\n              this._setValues($hndl, location); // TODO update to calculate based on values set to respective inputs??\n\n\n              if (isDbl) {\n                var isLeftHndl = this.handles.index($hndl) === 0,\n                    //empty variable, will be used for min-height/width for fill bar\n                dim,\n                    //percentage w/h of the handle compared to the slider bar\n                handlePct = ~~(percent(handleDim, elemDim) * 100); //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar\n\n                if (isLeftHndl) {\n                  //left or top percentage value to apply to the fill bar.\n                  css[lOrT] = \"\".concat(movement, \"%\"); //calculate the new min-height/width for the fill bar.\n\n                  dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct; //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider\n                  //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future.\n\n                  if (cb && typeof cb === 'function') {\n                    cb();\n                  } //this is only needed for the initialization of 2 handled sliders\n\n                } else {\n                  //just caching the value of the left/bottom handle's left/top property\n                  var handlePos = parseFloat(this.$handle[0].style[lOrT]); //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0\n                  //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself\n\n                  dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start) / ((this.options.end - this.options.start) / 100) : handlePos) + handlePct;\n                } // assign the min-height/width to our css object\n\n\n                css[\"min-\".concat(hOrW)] = \"\".concat(dim, \"%\");\n              }\n\n              this.$element.one('finished.zf.animate', function () {\n                /**\n                 * Fires when the handle is done moving.\n                 * @event Slider#moved\n                 */\n                _this.$element.trigger('moved.zf.slider', [$hndl]);\n              }); //because we don't know exactly how the handle will be moved, check the amount of time it should take to move.\n\n              var moveTime = this.$element.data('dragging') ? 1000 / 60 : this.options.moveTime;\n              Object(_foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__[\"Move\"])(moveTime, $hndl, function () {\n                // adjusting the left/top property of the handle, based on the percentage calculated above\n                // if movement isNaN, that is because the slider is hidden and we cannot determine handle width,\n                // fall back to next best guess.\n                if (isNaN(movement)) {\n                  $hndl.css(lOrT, \"\".concat(pctOfBar * 100, \"%\"));\n                } else {\n                  $hndl.css(lOrT, \"\".concat(movement, \"%\"));\n                }\n\n                if (!_this.options.doubleSided) {\n                  //if single-handled, a simple method to expand the fill bar\n                  _this.$fill.css(hOrW, \"\".concat(pctOfBar * 100, \"%\"));\n                } else {\n                  //otherwise, use the css object we created above\n                  _this.$fill.css(css);\n                }\n              });\n              /**\n               * Fires when the value has not been change for a given time.\n               * @event Slider#changed\n               */\n\n              clearTimeout(_this.timeout);\n              _this.timeout = setTimeout(function () {\n                _this.$element.trigger('changed.zf.slider', [$hndl]);\n              }, _this.options.changedDelay);\n            }\n            /**\n             * Sets the initial attribute for the slider element.\n             * @function\n             * @private\n             * @param {Number} idx - index of the current handle/input to use.\n             */\n\n          }, {\n            key: \"_setInitAttr\",\n            value: function _setInitAttr(idx) {\n              var initVal = idx === 0 ? this.options.initialStart : this.options.initialEnd;\n              var id = this.inputs.eq(idx).attr('id') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"GetYoDigits\"])(6, 'slider');\n              this.inputs.eq(idx).attr({\n                'id': id,\n                'max': this.options.end,\n                'min': this.options.start,\n                'step': this.options.step\n              });\n              this.inputs.eq(idx).val(initVal);\n              this.handles.eq(idx).attr({\n                'role': 'slider',\n                'aria-controls': id,\n                'aria-valuemax': this.options.end,\n                'aria-valuemin': this.options.start,\n                'aria-valuenow': initVal,\n                'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal',\n                'tabindex': 0\n              });\n            }\n            /**\n             * Sets the input and `aria-valuenow` values for the slider element.\n             * @function\n             * @private\n             * @param {jQuery} $handle - the currently selected handle.\n             * @param {Number} val - floating point of the new value.\n             */\n\n          }, {\n            key: \"_setValues\",\n            value: function _setValues($handle, val) {\n              var idx = this.options.doubleSided ? this.handles.index($handle) : 0;\n              this.inputs.eq(idx).val(val);\n              $handle.attr('aria-valuenow', val);\n            }\n            /**\n             * Handles events on the slider element.\n             * Calculates the new location of the current handle.\n             * If there are two handles and the bar was clicked, it determines which handle to move.\n             * @function\n             * @private\n             * @param {Object} e - the `event` object passed from the listener.\n             * @param {jQuery} $handle - the current handle to calculate for, if selected.\n             * @param {Number} val - floating point number for the new value of the slider.\n             * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn.\n             */\n\n          }, {\n            key: \"_handleEvent\",\n            value: function _handleEvent(e, $handle, val) {\n              var value, hasVal;\n\n              if (!val) {\n                //click or drag events\n                e.preventDefault();\n\n                var _this = this,\n                    vertical = this.options.vertical,\n                    param = vertical ? 'height' : 'width',\n                    direction = vertical ? 'top' : 'left',\n                    eventOffset = vertical ? e.pageY : e.pageX,\n                    halfOfHandle = this.$handle[0].getBoundingClientRect()[param] / 2,\n                    barDim = this.$element[0].getBoundingClientRect()[param],\n                    windowScroll = vertical ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop() : jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollLeft();\n\n                var elemOffset = this.$element.offset()[direction]; // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates...\n                // best way to guess this is simulated is if clientY == pageY\n\n                if (e.clientY === e.pageY) {\n                  eventOffset = eventOffset + windowScroll;\n                }\n\n                var eventFromBar = eventOffset - elemOffset;\n                var barXY;\n\n                if (eventFromBar < 0) {\n                  barXY = 0;\n                } else if (eventFromBar > barDim) {\n                  barXY = barDim;\n                } else {\n                  barXY = eventFromBar;\n                }\n\n                var offsetPct = percent(barXY, barDim);\n                value = this._value(offsetPct); // turn everything around for RTL, yay math!\n\n                if (Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"rtl\"])() && !this.options.vertical) {\n                  value = this.options.end - value;\n                }\n\n                value = _this._adjustValue(null, value); //boolean flag for the setHandlePos fn, specifically for vertical sliders\n\n                hasVal = false;\n\n                if (!$handle) {\n                  //figure out which handle it is, pass it to the next function.\n                  var firstHndlPos = absPosition(this.$handle, direction, barXY, param),\n                      secndHndlPos = absPosition(this.$handle2, direction, barXY, param);\n                  $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2;\n                }\n              } else {\n                //change event on input\n                value = this._adjustValue(null, val);\n                hasVal = true;\n              }\n\n              this._setHandlePos($handle, value, hasVal);\n            }\n            /**\n             * Adjustes value for handle in regard to step value. returns adjusted value\n             * @function\n             * @private\n             * @param {jQuery} $handle - the selected handle.\n             * @param {Number} value - value to adjust. used if $handle is falsy\n             */\n\n          }, {\n            key: \"_adjustValue\",\n            value: function _adjustValue($handle, value) {\n              var val,\n                  step = this.options.step,\n                  div = parseFloat(step / 2),\n                  left,\n                  prev_val,\n                  next_val;\n\n              if (!!$handle) {\n                val = parseFloat($handle.attr('aria-valuenow'));\n              } else {\n                val = value;\n              }\n\n              if (val >= 0) {\n                left = val % step;\n              } else {\n                left = step + val % step;\n              }\n\n              prev_val = val - left;\n              next_val = prev_val + step;\n\n              if (left === 0) {\n                return val;\n              }\n\n              val = val >= prev_val + div ? next_val : prev_val;\n              return val;\n            }\n            /**\n             * Adds event listeners to the slider elements.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              this._eventsForHandle(this.$handle);\n\n              if (this.handles[1]) {\n                this._eventsForHandle(this.$handle2);\n              }\n            }\n            /**\n             * Adds event listeners a particular handle\n             * @function\n             * @private\n             * @param {jQuery} $handle - the current handle to apply listeners to.\n             */\n\n          }, {\n            key: \"_eventsForHandle\",\n            value: function _eventsForHandle($handle) {\n              var _this = this,\n                  curHandle,\n                  timer;\n\n              var handleChangeEvent = function handleChangeEvent(e) {\n                var idx = _this.inputs.index(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));\n\n                _this._handleEvent(e, _this.handles.eq(idx), jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).val());\n              }; // IE only triggers the change event when the input loses focus which strictly follows the HTML specification\n              // listen for the enter key and trigger a change\n              // @see https://html.spec.whatwg.org/multipage/input.html#common-input-element-events\n\n\n              this.inputs.off('keyup.zf.slider').on('keyup.zf.slider', function (e) {\n                if (e.keyCode == 13) handleChangeEvent.call(this, e);\n              });\n              this.inputs.off('change.zf.slider').on('change.zf.slider', handleChangeEvent);\n\n              if (this.options.clickSelect) {\n                this.$element.off('click.zf.slider').on('click.zf.slider', function (e) {\n                  if (_this.$element.data('dragging')) {\n                    return false;\n                  }\n\n                  if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).is('[data-slider-handle]')) {\n                    if (_this.options.doubleSided) {\n                      _this._handleEvent(e);\n                    } else {\n                      _this._handleEvent(e, _this.$handle);\n                    }\n                  }\n                });\n              }\n\n              if (this.options.draggable) {\n                this.handles.addTouch();\n                var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body');\n                $handle.off('mousedown.zf.slider').on('mousedown.zf.slider', function (e) {\n                  $handle.addClass('is-dragging');\n\n                  _this.$fill.addClass('is-dragging'); //\n\n\n                  _this.$element.data('dragging', true);\n\n                  curHandle = jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.currentTarget);\n                  $body.on('mousemove.zf.slider', function (e) {\n                    e.preventDefault();\n\n                    _this._handleEvent(e, curHandle);\n                  }).on('mouseup.zf.slider', function (e) {\n                    _this._handleEvent(e, curHandle);\n\n                    $handle.removeClass('is-dragging');\n\n                    _this.$fill.removeClass('is-dragging');\n\n                    _this.$element.data('dragging', false);\n\n                    $body.off('mousemove.zf.slider mouseup.zf.slider');\n                  });\n                }) // prevent events triggered by touch\n                .on('selectstart.zf.slider touchmove.zf.slider', function (e) {\n                  e.preventDefault();\n                });\n              }\n\n              $handle.off('keydown.zf.slider').on('keydown.zf.slider', function (e) {\n                var _$handle = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0,\n                    oldValue = parseFloat(_this.inputs.eq(idx).val()),\n                    newValue; // handle keyboard event with keyboard util\n\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__[\"Keyboard\"].handleKey(e, 'Slider', {\n                  decrease: function decrease() {\n                    newValue = oldValue - _this.options.step;\n                  },\n                  increase: function increase() {\n                    newValue = oldValue + _this.options.step;\n                  },\n                  decrease_fast: function decrease_fast() {\n                    newValue = oldValue - _this.options.step * 10;\n                  },\n                  increase_fast: function increase_fast() {\n                    newValue = oldValue + _this.options.step * 10;\n                  },\n                  min: function min() {\n                    newValue = _this.options.start;\n                  },\n                  max: function max() {\n                    newValue = _this.options.end;\n                  },\n                  handled: function handled() {\n                    // only set handle pos when event was handled specially\n                    e.preventDefault();\n\n                    _this._setHandlePos(_$handle, newValue, true);\n                  }\n                });\n                /*if (newValue) { // if pressed key has special function, update value\n                  e.preventDefault();\n                  _this._setHandlePos(_$handle, newValue);\n                }*/\n\n              });\n            }\n            /**\n             * Destroys the slider plugin.\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.handles.off('.zf.slider');\n              this.inputs.off('.zf.slider');\n              this.$element.off('.zf.slider');\n              clearTimeout(this.timeout);\n            }\n          }]);\n\n          return Slider;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__[\"Plugin\"]);\n\n        Slider.defaults = {\n          /**\n           * Minimum value for the slider scale.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          start: 0,\n\n          /**\n           * Maximum value for the slider scale.\n           * @option\n           * @type {number}\n           * @default 100\n           */\n          end: 100,\n\n          /**\n           * Minimum value change per change event.\n           * @option\n           * @type {number}\n           * @default 1\n           */\n          step: 1,\n\n          /**\n           * Value at which the handle/input *(left handle/first input)* should be set to on initialization.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          initialStart: 0,\n\n          /**\n           * Value at which the right handle/second input should be set to on initialization.\n           * @option\n           * @type {number}\n           * @default 100\n           */\n          initialEnd: 100,\n\n          /**\n           * Allows the input to be located outside the container and visible. Set to by the JS\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          binding: false,\n\n          /**\n           * Allows the user to click/tap on the slider bar to select a value.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          clickSelect: true,\n\n          /**\n           * Set to true and use the `vertical` class to change alignment to vertical.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          vertical: false,\n\n          /**\n           * Allows the user to drag the slider handle(s) to select a value.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          draggable: true,\n\n          /**\n           * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          disabled: false,\n\n          /**\n           * Allows the use of two handles. Double checked by the JS. Changes some logic handling.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          doubleSided: false,\n\n          /**\n           * Potential future feature.\n           */\n          // steps: 100,\n\n          /**\n           * Number of decimal places the plugin should go to for floating point precision.\n           * @option\n           * @type {number}\n           * @default 2\n           */\n          decimal: 2,\n\n          /**\n           * Time delay for dragged elements.\n           */\n          // dragDelay: 0,\n\n          /**\n           * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings.\n           * @option\n           * @type {number}\n           * @default 200\n           */\n          moveTime: 200,\n          //update this if changing the transition time in the sass\n\n          /**\n           * Class applied to disabled sliders.\n           * @option\n           * @type {string}\n           * @default 'disabled'\n           */\n          disabledClass: 'disabled',\n\n          /**\n           * Will invert the default layout for a vertical<span data-tooltip title=\"who would do this???\"> </span>slider.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          invertVertical: false,\n\n          /**\n           * Milliseconds before the `changed.zf-slider` event is triggered after value change.\n           * @option\n           * @type {number}\n           * @default 500\n           */\n          changedDelay: 500,\n\n          /**\n          * Basevalue for non-linear sliders\n          * @option\n          * @type {number}\n          * @default 5\n          */\n          nonLinearBase: 5,\n\n          /**\n          * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting.\n          * @option\n          * @type {string}\n          * @default 'linear'\n          */\n          positionValueFunction: 'linear'\n        };\n\n        function percent(frac, num) {\n          return frac / num;\n        }\n\n        function absPosition($handle, dir, clickPos, param) {\n          return Math.abs($handle.position()[dir] + $handle[param]() / 2 - clickPos);\n        }\n\n        function baseLog(base, value) {\n          return Math.log(value) / Math.log(base);\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.smoothScroll.js\":\n      /*!***************************************!*\\\n        !*** ./js/foundation.smoothScroll.js ***!\n        \\***************************************/\n\n      /*! exports provided: SmoothScroll */\n\n      /***/\n      function jsFoundationSmoothScrollJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"SmoothScroll\", function () {\n          return SmoothScroll;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * SmoothScroll module.\n         * @module foundation.smooth-scroll\n         */\n\n\n        var SmoothScroll =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(SmoothScroll, _Plugin);\n\n          function SmoothScroll() {\n            _classCallCheck(this, SmoothScroll);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(SmoothScroll).apply(this, arguments));\n          }\n\n          _createClass(SmoothScroll, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of SmoothScroll.\n             * @class\n             * @name SmoothScroll\n             * @fires SmoothScroll#init\n             * @param {Object} element - jQuery object to add the trigger to.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, SmoothScroll.defaults, this.$element.data(), options);\n              this.className = 'SmoothScroll'; // ie9 back compat\n\n              this._init();\n            }\n            /**\n             * Initialize the SmoothScroll plugin\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"GetYoDigits\"])(6, 'smooth-scroll');\n              this.$element.attr({\n                id: id\n              });\n\n              this._events();\n            }\n            /**\n             * Initializes events for SmoothScroll.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              this._linkClickListener = this._handleLinkClick.bind(this);\n              this.$element.on('click.zf.smoothScroll', this._linkClickListener);\n              this.$element.on('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n            }\n            /**\n             * Handle the given event to smoothly scroll to the anchor pointed by the event target.\n             * @param {*} e - event\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_handleLinkClick\",\n            value: function _handleLinkClick(e) {\n              var _this = this; // Follow the link if it does not point to an anchor.\n\n\n              if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.currentTarget).is('a[href^=\"#\"]')) return;\n              var arrival = e.currentTarget.getAttribute('href');\n              this._inTransition = true;\n              SmoothScroll.scrollToLoc(arrival, this.options, function () {\n                _this._inTransition = false;\n              });\n              e.preventDefault();\n            }\n          }, {\n            key: \"_destroy\",\n\n            /**\n             * Destroys the SmoothScroll instance.\n             * @function\n             */\n            value: function _destroy() {\n              this.$element.off('click.zf.smoothScroll', this._linkClickListener);\n              this.$element.off('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n            }\n          }], [{\n            key: \"scrollToLoc\",\n\n            /**\n             * Function to scroll to a given location on the page.\n             * @param {String} loc - A properly formatted jQuery id selector. Example: '#foo'\n             * @param {Object} options - The options to use.\n             * @param {Function} callback - The callback function.\n             * @static\n             * @function\n             */\n            value: function scrollToLoc(loc) {\n              var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SmoothScroll.defaults;\n              var callback = arguments.length > 2 ? arguments[2] : undefined;\n              var $loc = jquery__WEBPACK_IMPORTED_MODULE_0___default()(loc); // Do nothing if target does not exist to prevent errors\n\n              if (!$loc.length) return false;\n              var scrollPos = Math.round($loc.offset().top - options.threshold / 2 - options.offset);\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').stop(true).animate({\n                scrollTop: scrollPos\n              }, options.animationDuration, options.animationEasing, function () {\n                if (typeof callback === 'function') {\n                  callback();\n                }\n              });\n            }\n          }]);\n\n          return SmoothScroll;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__[\"Plugin\"]);\n        /**\n         * Default settings for plugin.\n         */\n\n\n        SmoothScroll.defaults = {\n          /**\n           * Amount of time, in ms, the animated scrolling should take between locations.\n           * @option\n           * @type {number}\n           * @default 500\n           */\n          animationDuration: 500,\n\n          /**\n           * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.\n           * @option\n           * @type {string}\n           * @default 'linear'\n           * @see {@link https://api.jquery.com/animate|Jquery animate}\n           */\n          animationEasing: 'linear',\n\n          /**\n           * Number of pixels to use as a marker for location changes.\n           * @option\n           * @type {number}\n           * @default 50\n           */\n          threshold: 50,\n\n          /**\n           * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          offset: 0\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.sticky.js\":\n      /*!*********************************!*\\\n        !*** ./js/foundation.sticky.js ***!\n        \\*********************************/\n\n      /*! exports provided: Sticky */\n\n      /***/\n      function jsFoundationStickyJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Sticky\", function () {\n          return Sticky;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Sticky module.\n         * @module foundation.sticky\n         * @requires foundation.util.triggers\n         * @requires foundation.util.mediaQuery\n         */\n\n\n        var Sticky =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Sticky, _Plugin);\n\n          function Sticky() {\n            _classCallCheck(this, Sticky);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Sticky).apply(this, arguments));\n          }\n\n          _createClass(Sticky, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of a sticky thing.\n             * @class\n             * @name Sticky\n             * @param {jQuery} element - jQuery object to make sticky.\n             * @param {Object} options - options object passed when creating the element programmatically.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Sticky.defaults, this.$element.data(), options);\n              this.className = 'Sticky'; // ie9 back compat\n              // Triggers init is idempotent, just need to make sure it is initialized\n\n              _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              this._init();\n            }\n            /**\n             * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__[\"MediaQuery\"]._init();\n\n              var $parent = this.$element.parent('[data-sticky-container]'),\n                  id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"GetYoDigits\"])(6, 'sticky'),\n                  _this = this;\n\n              if ($parent.length) {\n                this.$container = $parent;\n              } else {\n                this.wasWrapped = true;\n                this.$element.wrap(this.options.container);\n                this.$container = this.$element.parent();\n              }\n\n              this.$container.addClass(this.options.containerClass);\n              this.$element.addClass(this.options.stickyClass).attr({\n                'data-resize': id,\n                'data-mutate': id\n              });\n\n              if (this.options.anchor !== '') {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()('#' + _this.options.anchor).attr({\n                  'data-mutate': id\n                });\n              }\n\n              this.scrollCount = this.options.checkEvery;\n              this.isStuck = false;\n              this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n                //We calculate the container height to have correct values for anchor points offset calculation.\n                _this.containerHeight = _this.$element.css(\"display\") == \"none\" ? 0 : _this.$element[0].getBoundingClientRect().height;\n\n                _this.$container.css('height', _this.containerHeight);\n\n                _this.elemHeight = _this.containerHeight;\n\n                if (_this.options.anchor !== '') {\n                  _this.$anchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#' + _this.options.anchor);\n                } else {\n                  _this._parsePoints();\n                }\n\n                _this._setSizes(function () {\n                  var scroll = window.pageYOffset;\n\n                  _this._calc(false, scroll); //Unstick the element will ensure that proper classes are set.\n\n\n                  if (!_this.isStuck) {\n                    _this._removeSticky(scroll >= _this.topPoint ? false : true);\n                  }\n                });\n\n                _this._events(id.split('-').reverse().join('-'));\n              });\n            }\n            /**\n             * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_parsePoints\",\n            value: function _parsePoints() {\n              var top = this.options.topAnchor == \"\" ? 1 : this.options.topAnchor,\n                  btm = this.options.btmAnchor == \"\" ? document.documentElement.scrollHeight : this.options.btmAnchor,\n                  pts = [top, btm],\n                  breaks = {};\n\n              for (var i = 0, len = pts.length; i < len && pts[i]; i++) {\n                var pt;\n\n                if (typeof pts[i] === 'number') {\n                  pt = pts[i];\n                } else {\n                  var place = pts[i].split(':'),\n                      anchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(place[0]));\n                  pt = anchor.offset().top;\n\n                  if (place[1] && place[1].toLowerCase() === 'bottom') {\n                    pt += anchor[0].getBoundingClientRect().height;\n                  }\n                }\n\n                breaks[i] = pt;\n              }\n\n              this.points = breaks;\n              return;\n            }\n            /**\n             * Adds event handlers for the scrolling element.\n             * @private\n             * @param {String} id - pseudo-random id for unique scroll event listener.\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events(id) {\n              var _this = this,\n                  scrollListener = this.scrollListener = \"scroll.zf.\".concat(id);\n\n              if (this.isOn) {\n                return;\n              }\n\n              if (this.canStick) {\n                this.isOn = true;\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(scrollListener).on(scrollListener, function (e) {\n                  if (_this.scrollCount === 0) {\n                    _this.scrollCount = _this.options.checkEvery;\n\n                    _this._setSizes(function () {\n                      _this._calc(false, window.pageYOffset);\n                    });\n                  } else {\n                    _this.scrollCount--;\n\n                    _this._calc(false, window.pageYOffset);\n                  }\n                });\n              }\n\n              this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function (e, el) {\n                _this._eventsHandler(id);\n              });\n              this.$element.on('mutateme.zf.trigger', function (e, el) {\n                _this._eventsHandler(id);\n              });\n\n              if (this.$anchor) {\n                this.$anchor.on('mutateme.zf.trigger', function (e, el) {\n                  _this._eventsHandler(id);\n                });\n              }\n            }\n            /**\n             * Handler for events.\n             * @private\n             * @param {String} id - pseudo-random id for unique scroll event listener.\n             */\n\n          }, {\n            key: \"_eventsHandler\",\n            value: function _eventsHandler(id) {\n              var _this = this,\n                  scrollListener = this.scrollListener = \"scroll.zf.\".concat(id);\n\n              _this._setSizes(function () {\n                _this._calc(false);\n\n                if (_this.canStick) {\n                  if (!_this.isOn) {\n                    _this._events(id);\n                  }\n                } else if (_this.isOn) {\n                  _this._pauseListeners(scrollListener);\n                }\n              });\n            }\n            /**\n             * Removes event handlers for scroll and change events on anchor.\n             * @fires Sticky#pause\n             * @param {String} scrollListener - unique, namespaced scroll listener attached to `window`\n             */\n\n          }, {\n            key: \"_pauseListeners\",\n            value: function _pauseListeners(scrollListener) {\n              this.isOn = false;\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(scrollListener);\n              /**\n               * Fires when the plugin is paused due to resize event shrinking the view.\n               * @event Sticky#pause\n               * @private\n               */\n\n              this.$element.trigger('pause.zf.sticky');\n            }\n            /**\n             * Called on every `scroll` event and on `_init`\n             * fires functions based on booleans and cached values\n             * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints.\n             * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`.\n             */\n\n          }, {\n            key: \"_calc\",\n            value: function _calc(checkSizes, scroll) {\n              if (checkSizes) {\n                this._setSizes();\n              }\n\n              if (!this.canStick) {\n                if (this.isStuck) {\n                  this._removeSticky(true);\n                }\n\n                return false;\n              }\n\n              if (!scroll) {\n                scroll = window.pageYOffset;\n              }\n\n              if (scroll >= this.topPoint) {\n                if (scroll <= this.bottomPoint) {\n                  if (!this.isStuck) {\n                    this._setSticky();\n                  }\n                } else {\n                  if (this.isStuck) {\n                    this._removeSticky(false);\n                  }\n                }\n              } else {\n                if (this.isStuck) {\n                  this._removeSticky(true);\n                }\n              }\n            }\n            /**\n             * Causes the $element to become stuck.\n             * Adds `position: fixed;`, and helper classes.\n             * @fires Sticky#stuckto\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_setSticky\",\n            value: function _setSticky() {\n              var _this = this,\n                  stickTo = this.options.stickTo,\n                  mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom',\n                  notStuckTo = stickTo === 'top' ? 'bottom' : 'top',\n                  css = {};\n\n              css[mrgn] = \"\".concat(this.options[mrgn], \"em\");\n              css[stickTo] = 0;\n              css[notStuckTo] = 'auto';\n              this.isStuck = true;\n              this.$element.removeClass(\"is-anchored is-at-\".concat(notStuckTo)).addClass(\"is-stuck is-at-\".concat(stickTo)).css(css)\n              /**\n               * Fires when the $element has become `position: fixed;`\n               * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top`\n               * @event Sticky#stuckto\n               */\n              .trigger(\"sticky.zf.stuckto:\".concat(stickTo));\n              this.$element.on(\"transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd\", function () {\n                _this._setSizes();\n              });\n            }\n            /**\n             * Causes the $element to become unstuck.\n             * Removes `position: fixed;`, and helper classes.\n             * Adds other helper classes.\n             * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element.\n             * @fires Sticky#unstuckfrom\n             * @private\n             */\n\n          }, {\n            key: \"_removeSticky\",\n            value: function _removeSticky(isTop) {\n              var stickTo = this.options.stickTo,\n                  stickToTop = stickTo === 'top',\n                  css = {},\n                  anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight,\n                  mrgn = stickToTop ? 'marginTop' : 'marginBottom',\n                  notStuckTo = stickToTop ? 'bottom' : 'top',\n                  topOrBottom = isTop ? 'top' : 'bottom';\n              css[mrgn] = 0;\n              css['bottom'] = 'auto';\n\n              if (isTop) {\n                css['top'] = 0;\n              } else {\n                css['top'] = anchorPt;\n              }\n\n              this.isStuck = false;\n              this.$element.removeClass(\"is-stuck is-at-\".concat(stickTo)).addClass(\"is-anchored is-at-\".concat(topOrBottom)).css(css)\n              /**\n               * Fires when the $element has become anchored.\n               * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom`\n               * @event Sticky#unstuckfrom\n               */\n              .trigger(\"sticky.zf.unstuckfrom:\".concat(topOrBottom));\n            }\n            /**\n             * Sets the $element and $container sizes for plugin.\n             * Calls `_setBreakPoints`.\n             * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`.\n             * @private\n             */\n\n          }, {\n            key: \"_setSizes\",\n            value: function _setSizes(cb) {\n              this.canStick = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__[\"MediaQuery\"].is(this.options.stickyOn);\n\n              if (!this.canStick) {\n                if (cb && typeof cb === 'function') {\n                  cb();\n                }\n              }\n\n              var _this = this,\n                  newElemWidth = this.$container[0].getBoundingClientRect().width,\n                  comp = window.getComputedStyle(this.$container[0]),\n                  pdngl = parseInt(comp['padding-left'], 10),\n                  pdngr = parseInt(comp['padding-right'], 10);\n\n              if (this.$anchor && this.$anchor.length) {\n                this.anchorHeight = this.$anchor[0].getBoundingClientRect().height;\n              } else {\n                this._parsePoints();\n              }\n\n              this.$element.css({\n                'max-width': \"\".concat(newElemWidth - pdngl - pdngr, \"px\")\n              });\n              var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight;\n\n              if (this.$element.css(\"display\") == \"none\") {\n                newContainerHeight = 0;\n              }\n\n              this.containerHeight = newContainerHeight;\n              this.$container.css({\n                height: newContainerHeight\n              });\n              this.elemHeight = newContainerHeight;\n\n              if (!this.isStuck) {\n                if (this.$element.hasClass('is-at-bottom')) {\n                  var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight;\n                  this.$element.css('top', anchorPt);\n                }\n              }\n\n              this._setBreakPoints(newContainerHeight, function () {\n                if (cb && typeof cb === 'function') {\n                  cb();\n                }\n              });\n            }\n            /**\n             * Sets the upper and lower breakpoints for the element to become sticky/unsticky.\n             * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`.\n             * @param {Function} cb - optional callback function to be called on completion.\n             * @private\n             */\n\n          }, {\n            key: \"_setBreakPoints\",\n            value: function _setBreakPoints(elemHeight, cb) {\n              if (!this.canStick) {\n                if (cb && typeof cb === 'function') {\n                  cb();\n                } else {\n                  return false;\n                }\n              }\n\n              var mTop = emCalc(this.options.marginTop),\n                  mBtm = emCalc(this.options.marginBottom),\n                  topPoint = this.points ? this.points[0] : this.$anchor.offset().top,\n                  bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight,\n                  // topPoint = this.$anchor.offset().top || this.points[0],\n              // bottomPoint = topPoint + this.anchorHeight || this.points[1],\n              winHeight = window.innerHeight;\n\n              if (this.options.stickTo === 'top') {\n                topPoint -= mTop;\n                bottomPoint -= elemHeight + mTop;\n              } else if (this.options.stickTo === 'bottom') {\n                topPoint -= winHeight - (elemHeight + mBtm);\n                bottomPoint -= winHeight - mBtm;\n              } else {//this would be the stickTo: both option... tricky\n              }\n\n              this.topPoint = topPoint;\n              this.bottomPoint = bottomPoint;\n\n              if (cb && typeof cb === 'function') {\n                cb();\n              }\n            }\n            /**\n             * Destroys the current sticky element.\n             * Resets the element to the top position first.\n             * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this._removeSticky(true);\n\n              this.$element.removeClass(\"\".concat(this.options.stickyClass, \" is-anchored is-at-top\")).css({\n                height: '',\n                top: '',\n                bottom: '',\n                'max-width': ''\n              }).off('resizeme.zf.trigger').off('mutateme.zf.trigger');\n\n              if (this.$anchor && this.$anchor.length) {\n                this.$anchor.off('change.zf.sticky');\n              }\n\n              if (this.scrollListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.scrollListener);\n              if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);\n\n              if (this.wasWrapped) {\n                this.$element.unwrap();\n              } else {\n                this.$container.removeClass(this.options.containerClass).css({\n                  height: ''\n                });\n              }\n            }\n          }]);\n\n          return Sticky;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__[\"Plugin\"]);\n\n        Sticky.defaults = {\n          /**\n           * Customizable container template. Add your own classes for styling and sizing.\n           * @option\n           * @type {string}\n           * @default '&lt;div data-sticky-container&gt;&lt;/div&gt;'\n           */\n          container: '<div data-sticky-container></div>',\n\n          /**\n           * Location in the view the element sticks to. Can be `'top'` or `'bottom'`.\n           * @option\n           * @type {string}\n           * @default 'top'\n           */\n          stickTo: 'top',\n\n          /**\n           * If anchored to a single element, the id of that element.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          anchor: '',\n\n          /**\n           * If using more than one element as anchor points, the id of the top anchor.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          topAnchor: '',\n\n          /**\n           * If using more than one element as anchor points, the id of the bottom anchor.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          btmAnchor: '',\n\n          /**\n           * Margin, in `em`'s to apply to the top of the element when it becomes sticky.\n           * @option\n           * @type {number}\n           * @default 1\n           */\n          marginTop: 1,\n\n          /**\n           * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky.\n           * @option\n           * @type {number}\n           * @default 1\n           */\n          marginBottom: 1,\n\n          /**\n           * Breakpoint string that is the minimum screen size an element should become sticky.\n           * @option\n           * @type {string}\n           * @default 'medium'\n           */\n          stickyOn: 'medium',\n\n          /**\n           * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`.\n           * @option\n           * @type {string}\n           * @default 'sticky'\n           */\n          stickyClass: 'sticky',\n\n          /**\n           * Class applied to sticky container. Foundation defaults to `sticky-container`.\n           * @option\n           * @type {string}\n           * @default 'sticky-container'\n           */\n          containerClass: 'sticky-container',\n\n          /**\n           * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll.\n           * @option\n           * @type {number}\n           * @default -1\n           */\n          checkEvery: -1\n        };\n        /**\n         * Helper function to calculate em values\n         * @param Number {em} - number of em's to calculate into pixels\n         */\n\n        function emCalc(em) {\n          return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em;\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.tabs.js\":\n      /*!*******************************!*\\\n        !*** ./js/foundation.tabs.js ***!\n        \\*******************************/\n\n      /*! exports provided: Tabs */\n\n      /***/\n      function jsFoundationTabsJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Tabs\", function () {\n          return Tabs;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.keyboard */\n        \"./js/foundation.util.keyboard.js\");\n        /* harmony import */\n\n\n        var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.util.imageLoader */\n        \"./js/foundation.util.imageLoader.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Tabs module.\n         * @module foundation.tabs\n         * @requires foundation.util.keyboard\n         * @requires foundation.util.imageLoader if tabs contain images\n         */\n\n\n        var Tabs =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Tabs, _Plugin);\n\n          function Tabs() {\n            _classCallCheck(this, Tabs);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Tabs).apply(this, arguments));\n          }\n\n          _createClass(Tabs, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of tabs.\n             * @class\n             * @name Tabs\n             * @fires Tabs#init\n             * @param {jQuery} element - jQuery object to make into tabs.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Tabs.defaults, this.$element.data(), options);\n              this.className = 'Tabs'; // ie9 back compat\n\n              this._init();\n\n              _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].register('Tabs', {\n                'ENTER': 'open',\n                'SPACE': 'open',\n                'ARROW_RIGHT': 'next',\n                'ARROW_UP': 'previous',\n                'ARROW_DOWN': 'next',\n                'ARROW_LEFT': 'previous' // 'TAB': 'next',\n                // 'SHIFT_TAB': 'previous'\n\n              });\n            }\n            /**\n             * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var _this2 = this;\n\n              var _this = this;\n\n              this._isInitializing = true;\n              this.$element.attr({\n                'role': 'tablist'\n              });\n              this.$tabTitles = this.$element.find(\".\".concat(this.options.linkClass));\n              this.$tabContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-tabs-content=\\\"\".concat(this.$element[0].id, \"\\\"]\"));\n              this.$tabTitles.each(function () {\n                var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    $link = $elem.find('a'),\n                    isActive = $elem.hasClass(\"\".concat(_this.options.linkActiveClass)),\n                    hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1),\n                    linkId = $link[0].id ? $link[0].id : \"\".concat(hash, \"-label\"),\n                    $tabContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(hash));\n                $elem.attr({\n                  'role': 'presentation'\n                });\n                $link.attr({\n                  'role': 'tab',\n                  'aria-controls': hash,\n                  'aria-selected': isActive,\n                  'id': linkId,\n                  'tabindex': isActive ? '0' : '-1'\n                });\n                $tabContent.attr({\n                  'role': 'tabpanel',\n                  'aria-labelledby': linkId\n                }); // Save up the initial hash to return to it later when going back in history\n\n                if (isActive) {\n                  _this._initialAnchor = \"#\".concat(hash);\n                }\n\n                if (!isActive) {\n                  $tabContent.attr('aria-hidden', 'true');\n                }\n\n                if (isActive && _this.options.autoFocus) {\n                  _this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n                      scrollTop: $elem.offset().top\n                    }, _this.options.deepLinkSmudgeDelay, function () {\n                      $link.focus();\n                    });\n                  });\n                }\n              });\n\n              if (this.options.matchHeight) {\n                var $images = this.$tabContent.find('img');\n\n                if ($images.length) {\n                  Object(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_3__[\"onImagesLoaded\"])($images, this._setHeight.bind(this));\n                } else {\n                  this._setHeight();\n                }\n              } // Current context-bound function to open tabs on page load or history hashchange\n\n\n              this._checkDeepLink = function () {\n                var anchor = window.location.hash;\n\n                if (!anchor.length) {\n                  // If we are still initializing and there is no anchor, then there is nothing to do\n                  if (_this2._isInitializing) return; // Otherwise, move to the initial anchor\n\n                  if (_this2._initialAnchor) anchor = _this2._initialAnchor;\n                }\n\n                var $anchor = anchor && jquery__WEBPACK_IMPORTED_MODULE_0___default()(anchor);\n\n                var $link = anchor && _this2.$element.find('[href$=\"' + anchor + '\"]'); // Whether the anchor element that has been found is part of this element\n\n\n                var isOwnAnchor = !!($anchor.length && $link.length); // If there is an anchor for the hash, select it\n\n                if ($anchor && $anchor.length && $link && $link.length) {\n                  _this2.selectTab($anchor, true);\n                } // Otherwise, collapse everything\n                else {\n                    _this2._collapse();\n                  }\n\n                if (isOwnAnchor) {\n                  // Roll up a little to show the titles\n                  if (_this2.options.deepLinkSmudge) {\n                    var offset = _this2.$element.offset();\n\n                    jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n                      scrollTop: offset.top\n                    }, _this2.options.deepLinkSmudgeDelay);\n                  }\n                  /**\n                   * Fires when the plugin has deeplinked at pageload\n                   * @event Tabs#deeplink\n                   */\n\n\n                  _this2.$element.trigger('deeplink.zf.tabs', [$link, $anchor]);\n                }\n              }; //use browser to open a tab, if it exists in this tabset\n\n\n              if (this.options.deepLink) {\n                this._checkDeepLink();\n              }\n\n              this._events();\n\n              this._isInitializing = false;\n            }\n            /**\n             * Adds event handlers for items within the tabs.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              this._addKeyHandler();\n\n              this._addClickHandler();\n\n              this._setHeightMqHandler = null;\n\n              if (this.options.matchHeight) {\n                this._setHeightMqHandler = this._setHeight.bind(this);\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._setHeightMqHandler);\n              }\n\n              if (this.options.deepLink) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._checkDeepLink);\n              }\n            }\n            /**\n             * Adds click handlers for items within the tabs.\n             * @private\n             */\n\n          }, {\n            key: \"_addClickHandler\",\n            value: function _addClickHandler() {\n              var _this = this;\n\n              this.$element.off('click.zf.tabs').on('click.zf.tabs', \".\".concat(this.options.linkClass), function (e) {\n                e.preventDefault();\n                e.stopPropagation();\n\n                _this._handleTabChange(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));\n              });\n            }\n            /**\n             * Adds keyboard event handlers for items within the tabs.\n             * @private\n             */\n\n          }, {\n            key: \"_addKeyHandler\",\n            value: function _addKeyHandler() {\n              var _this = this;\n\n              this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function (e) {\n                if (e.which === 9) return;\n                var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    $elements = $element.parent('ul').children('li'),\n                    $prevElement,\n                    $nextElement;\n                $elements.each(function (i) {\n                  if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) {\n                    if (_this.options.wrapOnKeys) {\n                      $prevElement = i === 0 ? $elements.last() : $elements.eq(i - 1);\n                      $nextElement = i === $elements.length - 1 ? $elements.first() : $elements.eq(i + 1);\n                    } else {\n                      $prevElement = $elements.eq(Math.max(0, i - 1));\n                      $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1));\n                    }\n\n                    return;\n                  }\n                }); // handle keyboard event with keyboard util\n\n                _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__[\"Keyboard\"].handleKey(e, 'Tabs', {\n                  open: function open() {\n                    $element.find('[role=\"tab\"]').focus();\n\n                    _this._handleTabChange($element);\n                  },\n                  previous: function previous() {\n                    $prevElement.find('[role=\"tab\"]').focus();\n\n                    _this._handleTabChange($prevElement);\n                  },\n                  next: function next() {\n                    $nextElement.find('[role=\"tab\"]').focus();\n\n                    _this._handleTabChange($nextElement);\n                  },\n                  handled: function handled() {\n                    e.stopPropagation();\n                    e.preventDefault();\n                  }\n                });\n              });\n            }\n            /**\n             * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.\n             * @param {jQuery} $target - Tab to open.\n             * @param {boolean} historyHandled - browser has already handled a history update\n             * @fires Tabs#change\n             * @function\n             */\n\n          }, {\n            key: \"_handleTabChange\",\n            value: function _handleTabChange($target, historyHandled) {\n              // With `activeCollapse`, if the target is the active Tab, collapse it.\n              if ($target.hasClass(\"\".concat(this.options.linkActiveClass))) {\n                if (this.options.activeCollapse) {\n                  this._collapse();\n                }\n\n                return;\n              }\n\n              var $oldTab = this.$element.find(\".\".concat(this.options.linkClass, \".\").concat(this.options.linkActiveClass)),\n                  $tabLink = $target.find('[role=\"tab\"]'),\n                  target = $tabLink.attr('data-tabs-target'),\n                  anchor = target && target.length ? \"#\".concat(target) : $tabLink[0].hash,\n                  $targetContent = this.$tabContent.find(anchor); //close old tab\n\n              this._collapseTab($oldTab); //open new tab\n\n\n              this._openTab($target); //either replace or update browser history\n\n\n              if (this.options.deepLink && !historyHandled) {\n                if (this.options.updateHistory) {\n                  history.pushState({}, '', anchor);\n                } else {\n                  history.replaceState({}, '', anchor);\n                }\n              }\n              /**\n               * Fires when the plugin has successfully changed tabs.\n               * @event Tabs#change\n               */\n\n\n              this.$element.trigger('change.zf.tabs', [$target, $targetContent]); //fire to children a mutation event\n\n              $targetContent.find(\"[data-mutate]\").trigger(\"mutateme.zf.trigger\");\n            }\n            /**\n             * Opens the tab `$targetContent` defined by `$target`.\n             * @param {jQuery} $target - Tab to open.\n             * @function\n             */\n\n          }, {\n            key: \"_openTab\",\n            value: function _openTab($target) {\n              var $tabLink = $target.find('[role=\"tab\"]'),\n                  hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1),\n                  $targetContent = this.$tabContent.find(\"#\".concat(hash));\n              $target.addClass(\"\".concat(this.options.linkActiveClass));\n              $tabLink.attr({\n                'aria-selected': 'true',\n                'tabindex': '0'\n              });\n              $targetContent.addClass(\"\".concat(this.options.panelActiveClass)).removeAttr('aria-hidden');\n            }\n            /**\n             * Collapses `$targetContent` defined by `$target`.\n             * @param {jQuery} $target - Tab to collapse.\n             * @function\n             */\n\n          }, {\n            key: \"_collapseTab\",\n            value: function _collapseTab($target) {\n              var $target_anchor = $target.removeClass(\"\".concat(this.options.linkActiveClass)).find('[role=\"tab\"]').attr({\n                'aria-selected': 'false',\n                'tabindex': -1\n              });\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat($target_anchor.attr('aria-controls'))).removeClass(\"\".concat(this.options.panelActiveClass)).attr({\n                'aria-hidden': 'true'\n              });\n            }\n            /**\n             * Collapses the active Tab.\n             * @fires Tabs#collapse\n             * @function\n             */\n\n          }, {\n            key: \"_collapse\",\n            value: function _collapse() {\n              var $activeTab = this.$element.find(\".\".concat(this.options.linkClass, \".\").concat(this.options.linkActiveClass));\n\n              if ($activeTab.length) {\n                this._collapseTab($activeTab);\n                /**\n                * Fires when the plugin has successfully collapsed tabs.\n                * @event Tabs#collapse\n                */\n\n\n                this.$element.trigger('collapse.zf.tabs', [$activeTab]);\n              }\n            }\n            /**\n             * Public method for selecting a content pane to display.\n             * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.\n             * @param {boolean} historyHandled - browser has already handled a history update\n             * @function\n             */\n\n          }, {\n            key: \"selectTab\",\n            value: function selectTab(elem, historyHandled) {\n              var idStr;\n\n              if (_typeof(elem) === 'object') {\n                idStr = elem[0].id;\n              } else {\n                idStr = elem;\n              }\n\n              if (idStr.indexOf('#') < 0) {\n                idStr = \"#\".concat(idStr);\n              }\n\n              var $target = this.$tabTitles.has(\"[href$=\\\"\".concat(idStr, \"\\\"]\"));\n\n              this._handleTabChange($target, historyHandled);\n            }\n          }, {\n            key: \"_setHeight\",\n\n            /**\n             * Sets the height of each panel to the height of the tallest panel.\n             * If enabled in options, gets called on media query change.\n             * If loading content via external source, can be called directly or with _reflow.\n             * If enabled with `data-match-height=\"true\"`, tabs sets to equal height\n             * @function\n             * @private\n             */\n            value: function _setHeight() {\n              var max = 0,\n                  _this = this; // Lock down the `this` value for the root tabs object\n\n\n              this.$tabContent.find(\".\".concat(this.options.panelClass)).css('height', '').each(function () {\n                var panel = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                    isActive = panel.hasClass(\"\".concat(_this.options.panelActiveClass)); // get the options from the parent instead of trying to get them from the child\n\n                if (!isActive) {\n                  panel.css({\n                    'visibility': 'hidden',\n                    'display': 'block'\n                  });\n                }\n\n                var temp = this.getBoundingClientRect().height;\n\n                if (!isActive) {\n                  panel.css({\n                    'visibility': '',\n                    'display': ''\n                  });\n                }\n\n                max = temp > max ? temp : max;\n              }).css('height', \"\".concat(max, \"px\"));\n            }\n            /**\n             * Destroys an instance of tabs.\n             * @fires Tabs#destroyed\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.find(\".\".concat(this.options.linkClass)).off('.zf.tabs').hide().end().find(\".\".concat(this.options.panelClass)).hide();\n\n              if (this.options.matchHeight) {\n                if (this._setHeightMqHandler != null) {\n                  jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('changed.zf.mediaquery', this._setHeightMqHandler);\n                }\n              }\n\n              if (this.options.deepLink) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._checkDeepLink);\n              }\n\n              if (this.onLoadListener) {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);\n              }\n            }\n          }]);\n\n          return Tabs;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__[\"Plugin\"]);\n\n        Tabs.defaults = {\n          /**\n           * Link the location hash to the active pane.\n           * Set the location hash when the active pane changes, and open the corresponding pane when the location changes.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          deepLink: false,\n\n          /**\n           * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          deepLinkSmudge: false,\n\n          /**\n           * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n           * @option\n           * @type {number}\n           * @default 300\n           */\n          deepLinkSmudgeDelay: 300,\n\n          /**\n           * If `deepLink` is enabled, update the browser history with the open tab\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          updateHistory: false,\n\n          /**\n           * Allows the window to scroll to content of active pane on load.\n           * Not recommended if more than one tab panel per page.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          autoFocus: false,\n\n          /**\n           * Allows keyboard input to 'wrap' around the tab links.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          wrapOnKeys: true,\n\n          /**\n           * Allows the tab content panes to match heights if set to true.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          matchHeight: false,\n\n          /**\n           * Allows active tabs to collapse when clicked.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          activeCollapse: false,\n\n          /**\n           * Class applied to `li`'s in tab link list.\n           * @option\n           * @type {string}\n           * @default 'tabs-title'\n           */\n          linkClass: 'tabs-title',\n\n          /**\n           * Class applied to the active `li` in tab link list.\n           * @option\n           * @type {string}\n           * @default 'is-active'\n           */\n          linkActiveClass: 'is-active',\n\n          /**\n           * Class applied to the content containers.\n           * @option\n           * @type {string}\n           * @default 'tabs-panel'\n           */\n          panelClass: 'tabs-panel',\n\n          /**\n           * Class applied to the active content container.\n           * @option\n           * @type {string}\n           * @default 'is-active'\n           */\n          panelActiveClass: 'is-active'\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.toggler.js\":\n      /*!**********************************!*\\\n        !*** ./js/foundation.toggler.js ***!\n        \\**********************************/\n\n      /*! exports provided: Toggler */\n\n      /***/\n      function jsFoundationTogglerJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Toggler\", function () {\n          return Toggler;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.util.motion */\n        \"./js/foundation.util.motion.js\");\n        /* harmony import */\n\n\n        var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.core.plugin */\n        \"./js/foundation.core.plugin.js\");\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Toggler module.\n         * @module foundation.toggler\n         * @requires foundation.util.motion\n         * @requires foundation.util.triggers\n         */\n\n\n        var Toggler =\n        /*#__PURE__*/\n        function (_Plugin) {\n          _inherits(Toggler, _Plugin);\n\n          function Toggler() {\n            _classCallCheck(this, Toggler);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Toggler).apply(this, arguments));\n          }\n\n          _createClass(Toggler, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of Toggler.\n             * @class\n             * @name Toggler\n             * @fires Toggler#init\n             * @param {Object} element - jQuery object to add the trigger to.\n             * @param {Object} options - Overrides to the default plugin settings.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Toggler.defaults, element.data(), options);\n              this.className = '';\n              this.className = 'Toggler'; // ie9 back compat\n              // Triggers init is idempotent, just need to make sure it is initialized\n\n              _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              this._init();\n\n              this._events();\n            }\n            /**\n             * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              var input; // Parse animation classes if they were set\n\n              if (this.options.animate) {\n                input = this.options.animate.split(' ');\n                this.animationIn = input[0];\n                this.animationOut = input[1] || null;\n              } // Otherwise, parse toggle class\n              else {\n                  input = this.$element.data('toggler'); // Allow for a . at the beginning of the string\n\n                  this.className = input[0] === '.' ? input.slice(1) : input;\n                } // Add ARIA attributes to triggers:\n\n\n              var id = this.$element[0].id,\n                  $triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-open~=\\\"\".concat(id, \"\\\"], [data-close~=\\\"\").concat(id, \"\\\"], [data-toggle~=\\\"\").concat(id, \"\\\"]\")); // - aria-expanded: according to the element visibility.\n\n              $triggers.attr('aria-expanded', !this.$element.is(':hidden')); // - aria-controls: adding the element id to it if not already in it.\n\n              $triggers.each(function (index, trigger) {\n                var $trigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()(trigger);\n                var controls = $trigger.attr('aria-controls') || '';\n                var containsId = new RegExp(\"\\\\b\".concat(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__[\"RegExpEscape\"])(id), \"\\\\b\")).test(controls);\n                if (!containsId) $trigger.attr('aria-controls', controls ? \"\".concat(controls, \" \").concat(id) : id);\n              });\n            }\n            /**\n             * Initializes events for the toggle trigger.\n             * @function\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this));\n            }\n            /**\n             * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was \"on\" or \"off\".\n             * @function\n             * @fires Toggler#on\n             * @fires Toggler#off\n             */\n\n          }, {\n            key: \"toggle\",\n            value: function toggle() {\n              this[this.options.animate ? '_toggleAnimate' : '_toggleClass']();\n            }\n          }, {\n            key: \"_toggleClass\",\n            value: function _toggleClass() {\n              this.$element.toggleClass(this.className);\n              var isOn = this.$element.hasClass(this.className);\n\n              if (isOn) {\n                /**\n                 * Fires if the target element has the class after a toggle.\n                 * @event Toggler#on\n                 */\n                this.$element.trigger('on.zf.toggler');\n              } else {\n                /**\n                 * Fires if the target element does not have the class after a toggle.\n                 * @event Toggler#off\n                 */\n                this.$element.trigger('off.zf.toggler');\n              }\n\n              this._updateARIA(isOn);\n\n              this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger');\n            }\n          }, {\n            key: \"_toggleAnimate\",\n            value: function _toggleAnimate() {\n              var _this = this;\n\n              if (this.$element.is(':hidden')) {\n                _foundation_util_motion__WEBPACK_IMPORTED_MODULE_1__[\"Motion\"].animateIn(this.$element, this.animationIn, function () {\n                  _this._updateARIA(true);\n\n                  this.trigger('on.zf.toggler');\n                  this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n                });\n              } else {\n                _foundation_util_motion__WEBPACK_IMPORTED_MODULE_1__[\"Motion\"].animateOut(this.$element, this.animationOut, function () {\n                  _this._updateARIA(false);\n\n                  this.trigger('off.zf.toggler');\n                  this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n                });\n              }\n            }\n          }, {\n            key: \"_updateARIA\",\n            value: function _updateARIA(isOn) {\n              var id = this.$element[0].id;\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-open=\\\"\".concat(id, \"\\\"], [data-close=\\\"\").concat(id, \"\\\"], [data-toggle=\\\"\").concat(id, \"\\\"]\")).attr({\n                'aria-expanded': isOn ? true : false\n              });\n            }\n            /**\n             * Destroys the instance of Toggler on the element.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.off('.zf.toggler');\n            }\n          }]);\n\n          return Toggler;\n        }(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__[\"Plugin\"]);\n\n        Toggler.defaults = {\n          /**\n           * Tells the plugin if the element should animated when toggled.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          animate: false\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.tooltip.js\":\n      /*!**********************************!*\\\n        !*** ./js/foundation.tooltip.js ***!\n        \\**********************************/\n\n      /*! exports provided: Tooltip */\n\n      /***/\n      function jsFoundationTooltipJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Tooltip\", function () {\n          return Tooltip;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.mediaQuery */\n        \"./js/foundation.util.mediaQuery.js\");\n        /* harmony import */\n\n\n        var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n        /*! ./foundation.util.triggers */\n        \"./js/foundation.util.triggers.js\");\n        /* harmony import */\n\n\n        var _foundation_positionable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n        /*! ./foundation.positionable */\n        \"./js/foundation.positionable.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n\n        function _possibleConstructorReturn(self, call) {\n          if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n            return call;\n          }\n\n          return _assertThisInitialized(self);\n        }\n\n        function _assertThisInitialized(self) {\n          if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n          }\n\n          return self;\n        }\n\n        function _get(target, property, receiver) {\n          if (typeof Reflect !== \"undefined\" && Reflect.get) {\n            _get = Reflect.get;\n          } else {\n            _get = function _get(target, property, receiver) {\n              var base = _superPropBase(target, property);\n\n              if (!base) return;\n              var desc = Object.getOwnPropertyDescriptor(base, property);\n\n              if (desc.get) {\n                return desc.get.call(receiver);\n              }\n\n              return desc.value;\n            };\n          }\n\n          return _get(target, property, receiver || target);\n        }\n\n        function _superPropBase(object, property) {\n          while (!Object.prototype.hasOwnProperty.call(object, property)) {\n            object = _getPrototypeOf(object);\n            if (object === null) break;\n          }\n\n          return object;\n        }\n\n        function _getPrototypeOf(o) {\n          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n            return o.__proto__ || Object.getPrototypeOf(o);\n          };\n          return _getPrototypeOf(o);\n        }\n\n        function _inherits(subClass, superClass) {\n          if (typeof superClass !== \"function\" && superClass !== null) {\n            throw new TypeError(\"Super expression must either be null or a function\");\n          }\n\n          subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n              value: subClass,\n              writable: true,\n              configurable: true\n            }\n          });\n          if (superClass) _setPrototypeOf(subClass, superClass);\n        }\n\n        function _setPrototypeOf(o, p) {\n          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n            o.__proto__ = p;\n            return o;\n          };\n\n          return _setPrototypeOf(o, p);\n        }\n        /**\n         * Tooltip module.\n         * @module foundation.tooltip\n         * @requires foundation.util.box\n         * @requires foundation.util.mediaQuery\n         * @requires foundation.util.triggers\n         */\n\n\n        var Tooltip =\n        /*#__PURE__*/\n        function (_Positionable) {\n          _inherits(Tooltip, _Positionable);\n\n          function Tooltip() {\n            _classCallCheck(this, Tooltip);\n\n            return _possibleConstructorReturn(this, _getPrototypeOf(Tooltip).apply(this, arguments));\n          }\n\n          _createClass(Tooltip, [{\n            key: \"_setup\",\n\n            /**\n             * Creates a new instance of a Tooltip.\n             * @class\n             * @name Tooltip\n             * @fires Tooltip#init\n             * @param {jQuery} element - jQuery object to attach a tooltip to.\n             * @param {Object} options - object to extend the default configuration.\n             */\n            value: function _setup(element, options) {\n              this.$element = element;\n              this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Tooltip.defaults, this.$element.data(), options);\n              this.className = 'Tooltip'; // ie9 back compat\n\n              this.isActive = false;\n              this.isClick = false; // Triggers init is idempotent, just need to make sure it is initialized\n\n              _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_3__[\"Triggers\"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);\n\n              this._init();\n            }\n            /**\n             * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor.\n             * @private\n             */\n\n          }, {\n            key: \"_init\",\n            value: function _init() {\n              _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__[\"MediaQuery\"]._init();\n\n              var elemId = this.$element.attr('aria-describedby') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"GetYoDigits\"])(6, 'tooltip');\n              this.options.tipText = this.options.tipText || this.$element.attr('title');\n              this.template = this.options.template ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.template) : this._buildTemplate(elemId);\n\n              if (this.options.allowHtml) {\n                this.template.appendTo(document.body).html(this.options.tipText).hide();\n              } else {\n                this.template.appendTo(document.body).text(this.options.tipText).hide();\n              }\n\n              this.$element.attr({\n                'title': '',\n                'aria-describedby': elemId,\n                'data-yeti-box': elemId,\n                'data-toggle': elemId,\n                'data-resize': elemId\n              }).addClass(this.options.triggerClass);\n\n              _get(_getPrototypeOf(Tooltip.prototype), \"_init\", this).call(this);\n\n              this._events();\n            }\n          }, {\n            key: \"_getDefaultPosition\",\n            value: function _getDefaultPosition() {\n              // handle legacy classnames\n              var position = this.$element[0].className.match(/\\b(top|left|right|bottom)\\b/g);\n              return position ? position[0] : 'top';\n            }\n          }, {\n            key: \"_getDefaultAlignment\",\n            value: function _getDefaultAlignment() {\n              return 'center';\n            }\n          }, {\n            key: \"_getHOffset\",\n            value: function _getHOffset() {\n              if (this.position === 'left' || this.position === 'right') {\n                return this.options.hOffset + this.options.tooltipWidth;\n              } else {\n                return this.options.hOffset;\n              }\n            }\n          }, {\n            key: \"_getVOffset\",\n            value: function _getVOffset() {\n              if (this.position === 'top' || this.position === 'bottom') {\n                return this.options.vOffset + this.options.tooltipHeight;\n              } else {\n                return this.options.vOffset;\n              }\n            }\n            /**\n             * builds the tooltip element, adds attributes, and returns the template.\n             * @private\n             */\n\n          }, {\n            key: \"_buildTemplate\",\n            value: function _buildTemplate(id) {\n              var templateClasses = \"\".concat(this.options.tooltipClass, \" \").concat(this.options.templateClasses).trim();\n              var $template = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div></div>').addClass(templateClasses).attr({\n                'role': 'tooltip',\n                'aria-hidden': true,\n                'data-is-active': false,\n                'data-is-focus': false,\n                'id': id\n              });\n              return $template;\n            }\n            /**\n             * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding.\n             * if the tooltip is larger than the screen width, default to full width - any user selected margin\n             * @private\n             */\n\n          }, {\n            key: \"_setPosition\",\n            value: function _setPosition() {\n              _get(_getPrototypeOf(Tooltip.prototype), \"_setPosition\", this).call(this, this.$element, this.template);\n            }\n            /**\n             * reveals the tooltip, and fires an event to close any other open tooltips on the page\n             * @fires Tooltip#closeme\n             * @fires Tooltip#show\n             * @function\n             */\n\n          }, {\n            key: \"show\",\n            value: function show() {\n              if (this.options.showOn !== 'all' && !_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__[\"MediaQuery\"].is(this.options.showOn)) {\n                // console.error('The screen is too small to display this tooltip');\n                return false;\n              }\n\n              var _this = this;\n\n              this.template.css('visibility', 'hidden').show();\n\n              this._setPosition();\n\n              this.template.removeClass('top bottom left right').addClass(this.position);\n              this.template.removeClass('align-top align-bottom align-left align-right align-center').addClass('align-' + this.alignment);\n              /**\n               * Fires to close all other open tooltips on the page\n               * @event Closeme#tooltip\n               */\n\n              this.$element.trigger('closeme.zf.tooltip', this.template.attr('id'));\n              this.template.attr({\n                'data-is-active': true,\n                'aria-hidden': false\n              });\n              _this.isActive = true; // console.log(this.template);\n\n              this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function () {//maybe do stuff?\n              });\n              /**\n               * Fires when the tooltip is shown\n               * @event Tooltip#show\n               */\n\n              this.$element.trigger('show.zf.tooltip');\n            }\n            /**\n             * Hides the current tooltip, and resets the positioning class if it was changed due to collision\n             * @fires Tooltip#hide\n             * @function\n             */\n\n          }, {\n            key: \"hide\",\n            value: function hide() {\n              // console.log('hiding', this.$element.data('yeti-box'));\n              var _this = this;\n\n              this.template.stop().attr({\n                'aria-hidden': true,\n                'data-is-active': false\n              }).fadeOut(this.options.fadeOutDuration, function () {\n                _this.isActive = false;\n                _this.isClick = false;\n              });\n              /**\n               * fires when the tooltip is hidden\n               * @event Tooltip#hide\n               */\n\n              this.$element.trigger('hide.zf.tooltip');\n            }\n            /**\n             * adds event listeners for the tooltip and its anchor\n             * TODO combine some of the listeners like focus and mouseenter, etc.\n             * @private\n             */\n\n          }, {\n            key: \"_events\",\n            value: function _events() {\n              var _this = this;\n\n              var $template = this.template;\n              var isFocus = false;\n\n              if (!this.options.disableHover) {\n                this.$element.on('mouseenter.zf.tooltip', function (e) {\n                  if (!_this.isActive) {\n                    _this.timeout = setTimeout(function () {\n                      _this.show();\n                    }, _this.options.hoverDelay);\n                  }\n                }).on('mouseleave.zf.tooltip', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"ignoreMousedisappear\"])(function (e) {\n                  clearTimeout(_this.timeout);\n\n                  if (!isFocus || _this.isClick && !_this.options.clickOpen) {\n                    _this.hide();\n                  }\n                }));\n              }\n\n              if (this.options.clickOpen) {\n                this.$element.on('mousedown.zf.tooltip', function (e) {\n                  e.stopImmediatePropagation();\n\n                  if (_this.isClick) {//_this.hide();\n                    // _this.isClick = false;\n                  } else {\n                    _this.isClick = true;\n\n                    if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) {\n                      _this.show();\n                    }\n                  }\n                });\n              } else {\n                this.$element.on('mousedown.zf.tooltip', function (e) {\n                  e.stopImmediatePropagation();\n                  _this.isClick = true;\n                });\n              }\n\n              if (!this.options.disableForTouch) {\n                this.$element.on('tap.zf.tooltip touchend.zf.tooltip', function (e) {\n                  _this.isActive ? _this.hide() : _this.show();\n                });\n              }\n\n              this.$element.on({\n                // 'toggle.zf.trigger': this.toggle.bind(this),\n                // 'close.zf.trigger': this.hide.bind(this)\n                'close.zf.trigger': this.hide.bind(this)\n              });\n              this.$element.on('focus.zf.tooltip', function (e) {\n                isFocus = true;\n\n                if (_this.isClick) {\n                  // If we're not showing open on clicks, we need to pretend a click-launched focus isn't\n                  // a real focus, otherwise on hover and come back we get bad behavior\n                  if (!_this.options.clickOpen) {\n                    isFocus = false;\n                  }\n\n                  return false;\n                } else {\n                  _this.show();\n                }\n              }).on('focusout.zf.tooltip', function (e) {\n                isFocus = false;\n                _this.isClick = false;\n\n                _this.hide();\n              }).on('resizeme.zf.trigger', function () {\n                if (_this.isActive) {\n                  _this._setPosition();\n                }\n              });\n            }\n            /**\n             * adds a toggle method, in addition to the static show() & hide() functions\n             * @function\n             */\n\n          }, {\n            key: \"toggle\",\n            value: function toggle() {\n              if (this.isActive) {\n                this.hide();\n              } else {\n                this.show();\n              }\n            }\n            /**\n             * Destroys an instance of tooltip, removes template element from the view.\n             * @function\n             */\n\n          }, {\n            key: \"_destroy\",\n            value: function _destroy() {\n              this.$element.attr('title', this.template.text()).off('.zf.trigger .zf.tooltip').removeClass(this.options.triggerClass).removeClass('top right left bottom').removeAttr('aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box');\n              this.template.remove();\n            }\n          }]);\n\n          return Tooltip;\n        }(_foundation_positionable__WEBPACK_IMPORTED_MODULE_4__[\"Positionable\"]);\n\n        Tooltip.defaults = {\n          disableForTouch: false,\n\n          /**\n           * Time, in ms, before a tooltip should open on hover.\n           * @option\n           * @type {number}\n           * @default 200\n           */\n          hoverDelay: 200,\n\n          /**\n           * Time, in ms, a tooltip should take to fade into view.\n           * @option\n           * @type {number}\n           * @default 150\n           */\n          fadeInDuration: 150,\n\n          /**\n           * Time, in ms, a tooltip should take to fade out of view.\n           * @option\n           * @type {number}\n           * @default 150\n           */\n          fadeOutDuration: 150,\n\n          /**\n           * Disables hover events from opening the tooltip if set to true\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          disableHover: false,\n\n          /**\n           * Optional addtional classes to apply to the tooltip template on init.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          templateClasses: '',\n\n          /**\n           * Non-optional class added to tooltip templates. Foundation default is 'tooltip'.\n           * @option\n           * @type {string}\n           * @default 'tooltip'\n           */\n          tooltipClass: 'tooltip',\n\n          /**\n           * Class applied to the tooltip anchor element.\n           * @option\n           * @type {string}\n           * @default 'has-tip'\n           */\n          triggerClass: 'has-tip',\n\n          /**\n           * Minimum breakpoint size at which to open the tooltip.\n           * @option\n           * @type {string}\n           * @default 'small'\n           */\n          showOn: 'small',\n\n          /**\n           * Custom template to be used to generate markup for tooltip.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          template: '',\n\n          /**\n           * Text displayed in the tooltip template on open.\n           * @option\n           * @type {string}\n           * @default ''\n           */\n          tipText: '',\n          touchCloseText: 'Tap to close.',\n\n          /**\n           * Allows the tooltip to remain open if triggered with a click or touch event.\n           * @option\n           * @type {boolean}\n           * @default true\n           */\n          clickOpen: true,\n\n          /**\n           * Position of tooltip. Can be left, right, bottom, top, or auto.\n           * @option\n           * @type {string}\n           * @default 'auto'\n           */\n          position: 'auto',\n\n          /**\n           * Alignment of tooltip relative to anchor. Can be left, right, bottom, top, center, or auto.\n           * @option\n           * @type {string}\n           * @default 'auto'\n           */\n          alignment: 'auto',\n\n          /**\n           * Allow overlap of container/window. If false, tooltip will first try to\n           * position as defined by data-position and data-alignment, but reposition if\n           * it would cause an overflow.  @option\n           * @type {boolean}\n           * @default false\n           */\n          allowOverlap: false,\n\n          /**\n           * Allow overlap of only the bottom of the container. This is the most common\n           * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n           * screen but not otherwise influence or break out of the container.\n           * Less common for tooltips.\n           * @option\n           * @type {boolean}\n           * @default false\n           */\n          allowBottomOverlap: false,\n\n          /**\n           * Distance, in pixels, the template should push away from the anchor on the Y axis.\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          vOffset: 0,\n\n          /**\n           * Distance, in pixels, the template should push away from the anchor on the X axis\n           * @option\n           * @type {number}\n           * @default 0\n           */\n          hOffset: 0,\n\n          /**\n           * Distance, in pixels, the template spacing auto-adjust for a vertical tooltip\n           * @option\n           * @type {number}\n           * @default 14\n           */\n          tooltipHeight: 14,\n\n          /**\n           * Distance, in pixels, the template spacing auto-adjust for a horizontal tooltip\n           * @option\n           * @type {number}\n           * @default 12\n           */\n          tooltipWidth: 12,\n\n          /**\n          * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips,\n          * allowing HTML may open yourself up to XSS attacks.\n          * @option\n          * @type {boolean}\n          * @default false\n          */\n          allowHtml: false\n        };\n        /**\n         * TODO utilize resize event trigger\n         */\n\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.util.box.js\":\n      /*!***********************************!*\\\n        !*** ./js/foundation.util.box.js ***!\n        \\***********************************/\n\n      /*! exports provided: Box */\n\n      /***/\n      function jsFoundationUtilBoxJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Box\", function () {\n          return Box;\n        });\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n\n        var Box = {\n          ImNotTouchingYou: ImNotTouchingYou,\n          OverlapArea: OverlapArea,\n          GetDimensions: GetDimensions,\n          GetOffsets: GetOffsets,\n          GetExplicitOffsets: GetExplicitOffsets\n          /**\n           * Compares the dimensions of an element to a container and determines collision events with container.\n           * @function\n           * @param {jQuery} element - jQuery object to test for collisions.\n           * @param {jQuery} parent - jQuery object to use as bounding container.\n           * @param {Boolean} lrOnly - set to true to check left and right values only.\n           * @param {Boolean} tbOnly - set to true to check top and bottom values only.\n           * @default if no parent object passed, detects collisions with `window`.\n           * @returns {Boolean} - true if collision free, false if a collision in any direction.\n           */\n\n        };\n\n        function ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) {\n          return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0;\n        }\n\n        ;\n\n        function OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) {\n          var eleDims = GetDimensions(element),\n              topOver,\n              bottomOver,\n              leftOver,\n              rightOver;\n\n          if (parent) {\n            var parDims = GetDimensions(parent);\n            bottomOver = parDims.height + parDims.offset.top - (eleDims.offset.top + eleDims.height);\n            topOver = eleDims.offset.top - parDims.offset.top;\n            leftOver = eleDims.offset.left - parDims.offset.left;\n            rightOver = parDims.width + parDims.offset.left - (eleDims.offset.left + eleDims.width);\n          } else {\n            bottomOver = eleDims.windowDims.height + eleDims.windowDims.offset.top - (eleDims.offset.top + eleDims.height);\n            topOver = eleDims.offset.top - eleDims.windowDims.offset.top;\n            leftOver = eleDims.offset.left - eleDims.windowDims.offset.left;\n            rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width);\n          }\n\n          bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0);\n          topOver = Math.min(topOver, 0);\n          leftOver = Math.min(leftOver, 0);\n          rightOver = Math.min(rightOver, 0);\n\n          if (lrOnly) {\n            return leftOver + rightOver;\n          }\n\n          if (tbOnly) {\n            return topOver + bottomOver;\n          } // use sum of squares b/c we care about overlap area.\n\n\n          return Math.sqrt(topOver * topOver + bottomOver * bottomOver + leftOver * leftOver + rightOver * rightOver);\n        }\n        /**\n         * Uses native methods to return an object of dimension values.\n         * @function\n         * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.\n         * @returns {Object} - nested object of integer pixel values\n         * TODO - if element is window, return only those values.\n         */\n\n\n        function GetDimensions(elem) {\n          elem = elem.length ? elem[0] : elem;\n\n          if (elem === window || elem === document) {\n            throw new Error(\"I'm sorry, Dave. I'm afraid I can't do that.\");\n          }\n\n          var rect = elem.getBoundingClientRect(),\n              parRect = elem.parentNode.getBoundingClientRect(),\n              winRect = document.body.getBoundingClientRect(),\n              winY = window.pageYOffset,\n              winX = window.pageXOffset;\n          return {\n            width: rect.width,\n            height: rect.height,\n            offset: {\n              top: rect.top + winY,\n              left: rect.left + winX\n            },\n            parentDims: {\n              width: parRect.width,\n              height: parRect.height,\n              offset: {\n                top: parRect.top + winY,\n                left: parRect.left + winX\n              }\n            },\n            windowDims: {\n              width: winRect.width,\n              height: winRect.height,\n              offset: {\n                top: winY,\n                left: winX\n              }\n            }\n          };\n        }\n        /**\n         * Returns an object of top and left integer pixel values for dynamically rendered elements,\n         * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where\n         * you don't know alignment, but generally from\n         * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment.\n         * @function\n         * @param {jQuery} element - jQuery object for the element being positioned.\n         * @param {jQuery} anchor - jQuery object for the element's anchor point.\n         * @param {String} position - a string relating to the desired position of the element, relative to it's anchor\n         * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.\n         * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.\n         * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.\n         * TODO alter/rewrite to work with `em` values as well/instead of pixels\n         */\n\n\n        function GetOffsets(element, anchor, position, vOffset, hOffset, isOverflow) {\n          console.log(\"NOTE: GetOffsets is deprecated in favor of GetExplicitOffsets and will be removed in 6.5\");\n\n          switch (position) {\n            case 'top':\n              return Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_0__[\"rtl\"])() ? GetExplicitOffsets(element, anchor, 'top', 'left', vOffset, hOffset, isOverflow) : GetExplicitOffsets(element, anchor, 'top', 'right', vOffset, hOffset, isOverflow);\n\n            case 'bottom':\n              return Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_0__[\"rtl\"])() ? GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow) : GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow);\n\n            case 'center top':\n              return GetExplicitOffsets(element, anchor, 'top', 'center', vOffset, hOffset, isOverflow);\n\n            case 'center bottom':\n              return GetExplicitOffsets(element, anchor, 'bottom', 'center', vOffset, hOffset, isOverflow);\n\n            case 'center left':\n              return GetExplicitOffsets(element, anchor, 'left', 'center', vOffset, hOffset, isOverflow);\n\n            case 'center right':\n              return GetExplicitOffsets(element, anchor, 'right', 'center', vOffset, hOffset, isOverflow);\n\n            case 'left bottom':\n              return GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow);\n\n            case 'right bottom':\n              return GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow);\n            // Backwards compatibility... this along with the reveal and reveal full\n            // classes are the only ones that didn't reference anchor\n\n            case 'center':\n              return {\n                left: $eleDims.windowDims.offset.left + $eleDims.windowDims.width / 2 - $eleDims.width / 2 + hOffset,\n                top: $eleDims.windowDims.offset.top + $eleDims.windowDims.height / 2 - ($eleDims.height / 2 + vOffset)\n              };\n\n            case 'reveal':\n              return {\n                left: ($eleDims.windowDims.width - $eleDims.width) / 2 + hOffset,\n                top: $eleDims.windowDims.offset.top + vOffset\n              };\n\n            case 'reveal full':\n              return {\n                left: $eleDims.windowDims.offset.left,\n                top: $eleDims.windowDims.offset.top\n              };\n              break;\n\n            default:\n              return {\n                left: Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_0__[\"rtl\"])() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset : $anchorDims.offset.left + hOffset,\n                top: $anchorDims.offset.top + $anchorDims.height + vOffset\n              };\n          }\n        }\n\n        function GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) {\n          var $eleDims = GetDimensions(element),\n              $anchorDims = anchor ? GetDimensions(anchor) : null;\n          var topVal, leftVal; // set position related attribute\n\n          switch (position) {\n            case 'top':\n              topVal = $anchorDims.offset.top - ($eleDims.height + vOffset);\n              break;\n\n            case 'bottom':\n              topVal = $anchorDims.offset.top + $anchorDims.height + vOffset;\n              break;\n\n            case 'left':\n              leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset);\n              break;\n\n            case 'right':\n              leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset;\n              break;\n          } // set alignment related attribute\n\n\n          switch (position) {\n            case 'top':\n            case 'bottom':\n              switch (alignment) {\n                case 'left':\n                  leftVal = $anchorDims.offset.left + hOffset;\n                  break;\n\n                case 'right':\n                  leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset;\n                  break;\n\n                case 'center':\n                  leftVal = isOverflow ? hOffset : $anchorDims.offset.left + $anchorDims.width / 2 - $eleDims.width / 2 + hOffset;\n                  break;\n              }\n\n              break;\n\n            case 'right':\n            case 'left':\n              switch (alignment) {\n                case 'bottom':\n                  topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height;\n                  break;\n\n                case 'top':\n                  topVal = $anchorDims.offset.top + vOffset;\n                  break;\n\n                case 'center':\n                  topVal = $anchorDims.offset.top + vOffset + $anchorDims.height / 2 - $eleDims.height / 2;\n                  break;\n              }\n\n              break;\n          }\n\n          return {\n            top: topVal,\n            left: leftVal\n          };\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.util.imageLoader.js\":\n      /*!*******************************************!*\\\n        !*** ./js/foundation.util.imageLoader.js ***!\n        \\*******************************************/\n\n      /*! exports provided: onImagesLoaded */\n\n      /***/\n      function jsFoundationUtilImageLoaderJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"onImagesLoaded\", function () {\n          return onImagesLoaded;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /**\n         * Runs a callback function when images are fully loaded.\n         * @param {Object} images - Image(s) to check if loaded.\n         * @param {Func} callback - Function to execute when image is fully loaded.\n         */\n\n\n        function onImagesLoaded(images, callback) {\n          var self = this,\n              unloaded = images.length;\n\n          if (unloaded === 0) {\n            callback();\n          }\n\n          images.each(function () {\n            // Check if image is loaded\n            if (this.complete && typeof this.naturalWidth !== 'undefined') {\n              singleImageLoaded();\n            } else {\n              // If the above check failed, simulate loading on detached element.\n              var image = new Image(); // Still count image as loaded if it finalizes with an error.\n\n              var events = \"load.zf.images error.zf.images\";\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(image).one(events, function me(event) {\n                // Unbind the event listeners. We're using 'one' but only one of the two events will have fired.\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).off(events, me);\n                singleImageLoaded();\n              });\n              image.src = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('src');\n            }\n          });\n\n          function singleImageLoaded() {\n            unloaded--;\n\n            if (unloaded === 0) {\n              callback();\n            }\n          }\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.util.keyboard.js\":\n      /*!****************************************!*\\\n        !*** ./js/foundation.util.keyboard.js ***!\n        \\****************************************/\n\n      /*! exports provided: Keyboard */\n\n      /***/\n      function jsFoundationUtilKeyboardJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Keyboard\", function () {\n          return Keyboard;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /*******************************************\n         *                                         *\n         * This util was created by Marius Olbertz *\n         * Please thank Marius on GitHub /owlbertz *\n         * or the web http://www.mariusolbertz.de/ *\n         *                                         *\n         ******************************************/\n\n\n        var keyCodes = {\n          9: 'TAB',\n          13: 'ENTER',\n          27: 'ESCAPE',\n          32: 'SPACE',\n          35: 'END',\n          36: 'HOME',\n          37: 'ARROW_LEFT',\n          38: 'ARROW_UP',\n          39: 'ARROW_RIGHT',\n          40: 'ARROW_DOWN'\n        };\n        var commands = {}; // Functions pulled out to be referenceable from internals\n\n        function findFocusable($element) {\n          if (!$element) {\n            return false;\n          }\n\n          return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () {\n            if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':visible') || jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('tabindex') < 0) {\n              return false;\n            } //only have visible elements and those that have a tabindex greater or equal 0\n\n\n            return true;\n          });\n        }\n\n        function parseKey(event) {\n          var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase(); // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events\n\n          key = key.replace(/\\W+/, '');\n          if (event.shiftKey) key = \"SHIFT_\".concat(key);\n          if (event.ctrlKey) key = \"CTRL_\".concat(key);\n          if (event.altKey) key = \"ALT_\".concat(key); // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)\n\n          key = key.replace(/_$/, '');\n          return key;\n        }\n\n        var Keyboard = {\n          keys: getKeyCodes(keyCodes),\n\n          /**\n           * Parses the (keyboard) event and returns a String that represents its key\n           * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n           * @param {Event} event - the event generated by the event handler\n           * @return String key - String that represents the key pressed\n           */\n          parseKey: parseKey,\n\n          /**\n           * Handles the given (keyboard) event\n           * @param {Event} event - the event generated by the event handler\n           * @param {String} component - Foundation component's name, e.g. Slider or Reveal\n           * @param {Objects} functions - collection of functions that are to be executed\n           */\n          handleKey: function handleKey(event, component, functions) {\n            var commandList = commands[component],\n                keyCode = this.parseKey(event),\n                cmds,\n                command,\n                fn;\n            if (!commandList) return console.warn('Component not defined!');\n\n            if (typeof commandList.ltr === 'undefined') {\n              // this component does not differentiate between ltr and rtl\n              cmds = commandList; // use plain list\n            } else {\n              // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa\n              if (Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"rtl\"])()) cmds = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, commandList.ltr, commandList.rtl);else cmds = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, commandList.rtl, commandList.ltr);\n            }\n\n            command = cmds[keyCode];\n            fn = functions[command];\n\n            if (fn && typeof fn === 'function') {\n              // execute function  if exists\n              var returnValue = fn.apply();\n\n              if (functions.handled || typeof functions.handled === 'function') {\n                // execute function when event was handled\n                functions.handled(returnValue);\n              }\n            } else {\n              if (functions.unhandled || typeof functions.unhandled === 'function') {\n                // execute function when event was not handled\n                functions.unhandled();\n              }\n            }\n          },\n\n          /**\n           * Finds all focusable elements within the given `$element`\n           * @param {jQuery} $element - jQuery object to search within\n           * @return {jQuery} $focusable - all focusable elements within `$element`\n           */\n          findFocusable: findFocusable,\n\n          /**\n           * Returns the component name name\n           * @param {Object} component - Foundation component, e.g. Slider or Reveal\n           * @return String componentName\n           */\n          register: function register(componentName, cmds) {\n            commands[componentName] = cmds;\n          },\n          // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?\n          //\n\n          /**\n           * Traps the focus in the given element.\n           * @param  {jQuery} $element  jQuery object to trap the foucs into.\n           */\n          trapFocus: function trapFocus($element) {\n            var $focusable = findFocusable($element),\n                $firstFocusable = $focusable.eq(0),\n                $lastFocusable = $focusable.eq(-1);\n            $element.on('keydown.zf.trapfocus', function (event) {\n              if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {\n                event.preventDefault();\n                $firstFocusable.focus();\n              } else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {\n                event.preventDefault();\n                $lastFocusable.focus();\n              }\n            });\n          },\n\n          /**\n           * Releases the trapped focus from the given element.\n           * @param  {jQuery} $element  jQuery object to release the focus for.\n           */\n          releaseFocus: function releaseFocus($element) {\n            $element.off('keydown.zf.trapfocus');\n          }\n        };\n        /*\n         * Constants for easier comparing.\n         * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n         */\n\n        function getKeyCodes(kcs) {\n          var k = {};\n\n          for (var kc in kcs) {\n            k[kcs[kc]] = kcs[kc];\n          }\n\n          return k;\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.util.mediaQuery.js\":\n      /*!******************************************!*\\\n        !*** ./js/foundation.util.mediaQuery.js ***!\n        \\******************************************/\n\n      /*! exports provided: MediaQuery */\n\n      /***/\n      function jsFoundationUtilMediaQueryJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"MediaQuery\", function () {\n          return MediaQuery;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        } // Default set of media queries\n\n\n        var defaultQueries = {\n          'default': 'only screen',\n          landscape: 'only screen and (orientation: landscape)',\n          portrait: 'only screen and (orientation: portrait)',\n          retina: 'only screen and (-webkit-min-device-pixel-ratio: 2),' + 'only screen and (min--moz-device-pixel-ratio: 2),' + 'only screen and (-o-min-device-pixel-ratio: 2/1),' + 'only screen and (min-device-pixel-ratio: 2),' + 'only screen and (min-resolution: 192dpi),' + 'only screen and (min-resolution: 2dppx)'\n        }; // matchMedia() polyfill - Test a CSS media type/query in JS.\n        // Authors & copyright(c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license\n\n        /* eslint-disable */\n\n        window.matchMedia || (window.matchMedia = function () {\n          \"use strict\"; // For browsers that support matchMedium api such as IE 9 and webkit\n\n          var styleMedia = window.styleMedia || window.media; // For those that don't support matchMedium\n\n          if (!styleMedia) {\n            var style = document.createElement('style'),\n                script = document.getElementsByTagName('script')[0],\n                info = null;\n            style.type = 'text/css';\n            style.id = 'matchmediajs-test';\n\n            if (!script) {\n              document.head.appendChild(style);\n            } else {\n              script.parentNode.insertBefore(style, script);\n            } // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n\n\n            info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n            styleMedia = {\n              matchMedium: function matchMedium(media) {\n                var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }'; // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n\n                if (style.styleSheet) {\n                  style.styleSheet.cssText = text;\n                } else {\n                  style.textContent = text;\n                } // Test if media query is true or false\n\n\n                return info.width === '1px';\n              }\n            };\n          }\n\n          return function (media) {\n            return {\n              matches: styleMedia.matchMedium(media || 'all'),\n              media: media || 'all'\n            };\n          };\n        }());\n        /* eslint-enable */\n\n        var MediaQuery = {\n          queries: [],\n          current: '',\n\n          /**\n           * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.\n           * @function\n           * @private\n           */\n          _init: function _init() {\n            var self = this;\n            var $meta = jquery__WEBPACK_IMPORTED_MODULE_0___default()('meta.foundation-mq');\n\n            if (!$meta.length) {\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()('<meta class=\"foundation-mq\">').appendTo(document.head);\n            }\n\n            var extractedStyles = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.foundation-mq').css('font-family');\n            var namedQueries;\n            namedQueries = parseStyleToObject(extractedStyles);\n\n            for (var key in namedQueries) {\n              if (namedQueries.hasOwnProperty(key)) {\n                self.queries.push({\n                  name: key,\n                  value: \"only screen and (min-width: \".concat(namedQueries[key], \")\")\n                });\n              }\n            }\n\n            this.current = this._getCurrentSize();\n\n            this._watcher();\n          },\n\n          /**\n           * Checks if the screen is at least as wide as a breakpoint.\n           * @function\n           * @param {String} size - Name of the breakpoint to check.\n           * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.\n           */\n          atLeast: function atLeast(size) {\n            var query = this.get(size);\n\n            if (query) {\n              return window.matchMedia(query).matches;\n            }\n\n            return false;\n          },\n\n          /**\n           * Checks if the screen matches to a breakpoint.\n           * @function\n           * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.\n           * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.\n           */\n          is: function is(size) {\n            size = size.trim().split(' ');\n\n            if (size.length > 1 && size[1] === 'only') {\n              if (size[0] === this._getCurrentSize()) return true;\n            } else {\n              return this.atLeast(size[0]);\n            }\n\n            return false;\n          },\n\n          /**\n           * Gets the media query of a breakpoint.\n           * @function\n           * @param {String} size - Name of the breakpoint to get.\n           * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.\n           */\n          get: function get(size) {\n            for (var i in this.queries) {\n              if (this.queries.hasOwnProperty(i)) {\n                var query = this.queries[i];\n                if (size === query.name) return query.value;\n              }\n            }\n\n            return null;\n          },\n\n          /**\n           * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).\n           * @function\n           * @private\n           * @returns {String} Name of the current breakpoint.\n           */\n          _getCurrentSize: function _getCurrentSize() {\n            var matched;\n\n            for (var i = 0; i < this.queries.length; i++) {\n              var query = this.queries[i];\n\n              if (window.matchMedia(query.value).matches) {\n                matched = query;\n              }\n            }\n\n            if (_typeof(matched) === 'object') {\n              return matched.name;\n            } else {\n              return matched;\n            }\n          },\n\n          /**\n           * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.\n           * @function\n           * @private\n           */\n          _watcher: function _watcher() {\n            var _this = this;\n\n            jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('resize.zf.mediaquery').on('resize.zf.mediaquery', function () {\n              var newSize = _this._getCurrentSize(),\n                  currentSize = _this.current;\n\n              if (newSize !== currentSize) {\n                // Change the current media query\n                _this.current = newSize; // Broadcast the media query change on the window\n\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);\n              }\n            });\n          }\n        }; // Thank you: https://github.com/sindresorhus/query-string\n\n        function parseStyleToObject(str) {\n          var styleObject = {};\n\n          if (typeof str !== 'string') {\n            return styleObject;\n          }\n\n          str = str.trim().slice(1, -1); // browsers re-quote string style values\n\n          if (!str) {\n            return styleObject;\n          }\n\n          styleObject = str.split('&').reduce(function (ret, param) {\n            var parts = param.replace(/\\+/g, ' ').split('=');\n            var key = parts[0];\n            var val = parts[1];\n            key = decodeURIComponent(key); // missing `=` should be `null`:\n            // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\n            val = typeof val === 'undefined' ? null : decodeURIComponent(val);\n\n            if (!ret.hasOwnProperty(key)) {\n              ret[key] = val;\n            } else if (Array.isArray(ret[key])) {\n              ret[key].push(val);\n            } else {\n              ret[key] = [ret[key], val];\n            }\n\n            return ret;\n          }, {});\n          return styleObject;\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.util.motion.js\":\n      /*!**************************************!*\\\n        !*** ./js/foundation.util.motion.js ***!\n        \\**************************************/\n\n      /*! exports provided: Move, Motion */\n\n      /***/\n      function jsFoundationUtilMotionJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Move\", function () {\n          return Move;\n        });\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Motion\", function () {\n          return Motion;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /**\n         * Motion module.\n         * @module foundation.motion\n         */\n\n\n        var initClasses = ['mui-enter', 'mui-leave'];\n        var activeClasses = ['mui-enter-active', 'mui-leave-active'];\n        var Motion = {\n          animateIn: function animateIn(element, animation, cb) {\n            animate(true, element, animation, cb);\n          },\n          animateOut: function animateOut(element, animation, cb) {\n            animate(false, element, animation, cb);\n          }\n        };\n\n        function Move(duration, elem, fn) {\n          var anim,\n              prog,\n              start = null; // console.log('called');\n\n          if (duration === 0) {\n            fn.apply(elem);\n            elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n            return;\n          }\n\n          function move(ts) {\n            if (!start) start = ts; // console.log(start, ts);\n\n            prog = ts - start;\n            fn.apply(elem);\n\n            if (prog < duration) {\n              anim = window.requestAnimationFrame(move, elem);\n            } else {\n              window.cancelAnimationFrame(anim);\n              elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n            }\n          }\n\n          anim = window.requestAnimationFrame(move);\n        }\n        /**\n         * Animates an element in or out using a CSS transition class.\n         * @function\n         * @private\n         * @param {Boolean} isIn - Defines if the animation is in or out.\n         * @param {Object} element - jQuery or HTML object to animate.\n         * @param {String} animation - CSS class to use.\n         * @param {Function} cb - Callback to run when animation is finished.\n         */\n\n\n        function animate(isIn, element, animation, cb) {\n          element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element).eq(0);\n          if (!element.length) return;\n          var initClass = isIn ? initClasses[0] : initClasses[1];\n          var activeClass = isIn ? activeClasses[0] : activeClasses[1]; // Set up the animation\n\n          reset();\n          element.addClass(animation).css('transition', 'none');\n          requestAnimationFrame(function () {\n            element.addClass(initClass);\n            if (isIn) element.show();\n          }); // Start the animation\n\n          requestAnimationFrame(function () {\n            element[0].offsetWidth;\n            element.css('transition', '').addClass(activeClass);\n          }); // Clean up the animation when it finishes\n\n          element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"transitionend\"])(element), finish); // Hides the element (for out animations), resets the element, and runs a callback\n\n          function finish() {\n            if (!isIn) element.hide();\n            reset();\n            if (cb) cb.apply(element);\n          } // Resets transitions and removes motion-specific classes\n\n\n          function reset() {\n            element[0].style.transitionDuration = 0;\n            element.removeClass(\"\".concat(initClass, \" \").concat(activeClass, \" \").concat(animation));\n          }\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.util.nest.js\":\n      /*!************************************!*\\\n        !*** ./js/foundation.util.nest.js ***!\n        \\************************************/\n\n      /*! exports provided: Nest */\n\n      /***/\n      function jsFoundationUtilNestJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Nest\", function () {\n          return Nest;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n        var Nest = {\n          Feather: function Feather(menu) {\n            var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zf';\n            menu.attr('role', 'menubar');\n            var items = menu.find('li').attr({\n              'role': 'menuitem'\n            }),\n                subMenuClass = \"is-\".concat(type, \"-submenu\"),\n                subItemClass = \"\".concat(subMenuClass, \"-item\"),\n                hasSubClass = \"is-\".concat(type, \"-submenu-parent\"),\n                applyAria = type !== 'accordion'; // Accordions handle their own ARIA attriutes.\n\n            items.each(function () {\n              var $item = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n                  $sub = $item.children('ul');\n\n              if ($sub.length) {\n                $item.addClass(hasSubClass);\n\n                if (applyAria) {\n                  $item.attr({\n                    'aria-haspopup': true,\n                    'aria-label': $item.children('a:first').text()\n                  }); // Note:  Drilldowns behave differently in how they hide, and so need\n                  // additional attributes.  We should look if this possibly over-generalized\n                  // utility (Nest) is appropriate when we rework menus in 6.4\n\n                  if (type === 'drilldown') {\n                    $item.attr({\n                      'aria-expanded': false\n                    });\n                  }\n                }\n\n                $sub.addClass(\"submenu \".concat(subMenuClass)).attr({\n                  'data-submenu': '',\n                  'role': 'menubar'\n                });\n\n                if (type === 'drilldown') {\n                  $sub.attr({\n                    'aria-hidden': true\n                  });\n                }\n              }\n\n              if ($item.parent('[data-submenu]').length) {\n                $item.addClass(\"is-submenu-item \".concat(subItemClass));\n              }\n            });\n            return;\n          },\n          Burn: function Burn(menu, type) {\n            var //items = menu.find('li'),\n            subMenuClass = \"is-\".concat(type, \"-submenu\"),\n                subItemClass = \"\".concat(subMenuClass, \"-item\"),\n                hasSubClass = \"is-\".concat(type, \"-submenu-parent\");\n            menu.find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li').removeClass(\"\".concat(subMenuClass, \" \").concat(subItemClass, \" \").concat(hasSubClass, \" is-submenu-item submenu is-active\")).removeAttr('data-submenu').css('display', '');\n          }\n        };\n        /***/\n      },\n\n      /***/\n      \"./js/foundation.util.timer.js\":\n      /*!*************************************!*\\\n        !*** ./js/foundation.util.timer.js ***!\n        \\*************************************/\n\n      /*! exports provided: Timer */\n\n      /***/\n      function jsFoundationUtilTimerJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Timer\", function () {\n          return Timer;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n        function Timer(elem, options, cb) {\n          var _this = this,\n              duration = options.duration,\n              //options is an object for easily adding features later.\n          nameSpace = Object.keys(elem.data())[0] || 'timer',\n              remain = -1,\n              start,\n              timer;\n\n          this.isPaused = false;\n\n          this.restart = function () {\n            remain = -1;\n            clearTimeout(timer);\n            this.start();\n          };\n\n          this.start = function () {\n            this.isPaused = false; // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.\n\n            clearTimeout(timer);\n            remain = remain <= 0 ? duration : remain;\n            elem.data('paused', false);\n            start = Date.now();\n            timer = setTimeout(function () {\n              if (options.infinite) {\n                _this.restart(); //rerun the timer.\n\n              }\n\n              if (cb && typeof cb === 'function') {\n                cb();\n              }\n            }, remain);\n            elem.trigger(\"timerstart.zf.\".concat(nameSpace));\n          };\n\n          this.pause = function () {\n            this.isPaused = true; //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.\n\n            clearTimeout(timer);\n            elem.data('paused', true);\n            var end = Date.now();\n            remain = remain - (end - start);\n            elem.trigger(\"timerpaused.zf.\".concat(nameSpace));\n          };\n        }\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.util.touch.js\":\n      /*!*************************************!*\\\n        !*** ./js/foundation.util.touch.js ***!\n        \\*************************************/\n\n      /*! exports provided: Touch */\n\n      /***/\n      function jsFoundationUtilTouchJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Touch\", function () {\n          return Touch;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n\n        function _defineProperties(target, props) {\n          for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps) _defineProperties(Constructor, staticProps);\n          return Constructor;\n        } //**************************************************\n        //**Work inspired by multiple jquery swipe plugins**\n        //**Done by Yohai Ararat ***************************\n        //**************************************************\n\n\n        var Touch = {};\n        var startPosX,\n            startPosY,\n            startTime,\n            elapsedTime,\n            startEvent,\n            isMoving = false,\n            didMoved = false;\n\n        function onTouchEnd(e) {\n          this.removeEventListener('touchmove', onTouchMove);\n          this.removeEventListener('touchend', onTouchEnd); // If the touch did not move, consider it as a \"tap\"\n\n          if (!didMoved) {\n            var tapEvent = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event('tap', startEvent || e);\n            jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger(tapEvent);\n          }\n\n          startEvent = null;\n          isMoving = false;\n          didMoved = false;\n        }\n\n        function onTouchMove(e) {\n          if (jquery__WEBPACK_IMPORTED_MODULE_0___default.a.spotSwipe.preventDefault) {\n            e.preventDefault();\n          }\n\n          if (isMoving) {\n            var x = e.touches[0].pageX;\n            var y = e.touches[0].pageY;\n            var dx = startPosX - x;\n            var dy = startPosY - y;\n            var dir;\n            didMoved = true;\n            elapsedTime = new Date().getTime() - startTime;\n\n            if (Math.abs(dx) >= jquery__WEBPACK_IMPORTED_MODULE_0___default.a.spotSwipe.moveThreshold && elapsedTime <= jquery__WEBPACK_IMPORTED_MODULE_0___default.a.spotSwipe.timeThreshold) {\n              dir = dx > 0 ? 'left' : 'right';\n            } // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n            //   dir = dy > 0 ? 'down' : 'up';\n            // }\n\n\n            if (dir) {\n              e.preventDefault();\n              onTouchEnd.apply(this, arguments);\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger(jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event('swipe', e), dir).trigger(jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event(\"swipe\".concat(dir), e));\n            }\n          }\n        }\n\n        function onTouchStart(e) {\n          if (e.touches.length == 1) {\n            startPosX = e.touches[0].pageX;\n            startPosY = e.touches[0].pageY;\n            startEvent = e;\n            isMoving = true;\n            didMoved = false;\n            startTime = new Date().getTime();\n            this.addEventListener('touchmove', onTouchMove, false);\n            this.addEventListener('touchend', onTouchEnd, false);\n          }\n        }\n\n        function init() {\n          this.addEventListener && this.addEventListener('touchstart', onTouchStart, false);\n        }\n\n        function teardown() {\n          this.removeEventListener('touchstart', onTouchStart);\n        }\n\n        var SpotSwipe =\n        /*#__PURE__*/\n        function () {\n          function SpotSwipe($) {\n            _classCallCheck(this, SpotSwipe);\n\n            this.version = '1.0.0';\n            this.enabled = 'ontouchstart' in document.documentElement;\n            this.preventDefault = false;\n            this.moveThreshold = 75;\n            this.timeThreshold = 200;\n            this.$ = $;\n\n            this._init();\n          }\n\n          _createClass(SpotSwipe, [{\n            key: \"_init\",\n            value: function _init() {\n              var $ = this.$;\n              $.event.special.swipe = {\n                setup: init\n              };\n              $.event.special.tap = {\n                setup: init\n              };\n              $.each(['left', 'up', 'down', 'right'], function () {\n                $.event.special[\"swipe\".concat(this)] = {\n                  setup: function setup() {\n                    $(this).on('swipe', $.noop);\n                  }\n                };\n              });\n            }\n          }]);\n\n          return SpotSwipe;\n        }();\n        /****************************************************\n         * As far as I can tell, both setupSpotSwipe and    *\n         * setupTouchHandler should be idempotent,          *\n         * because they directly replace functions &        *\n         * values, and do not add event handlers directly.  *\n         ****************************************************/\n\n\n        Touch.setupSpotSwipe = function ($) {\n          $.spotSwipe = new SpotSwipe($);\n        };\n        /****************************************************\n         * Method for adding pseudo drag events to elements *\n         ***************************************************/\n\n\n        Touch.setupTouchHandler = function ($) {\n          $.fn.addTouch = function () {\n            this.each(function (i, el) {\n              $(el).bind('touchstart touchmove touchend touchcancel', function (event) {\n                //we pass the original event object because the jQuery event\n                //object is normalized to w3c specs and does not provide the TouchList\n                handleTouch(event);\n              });\n            });\n\n            var handleTouch = function handleTouch(event) {\n              var touches = event.changedTouches,\n                  first = touches[0],\n                  eventTypes = {\n                touchstart: 'mousedown',\n                touchmove: 'mousemove',\n                touchend: 'mouseup'\n              },\n                  type = eventTypes[event.type],\n                  simulatedEvent;\n\n              if ('MouseEvent' in window && typeof window.MouseEvent === 'function') {\n                simulatedEvent = new window.MouseEvent(type, {\n                  'bubbles': true,\n                  'cancelable': true,\n                  'screenX': first.screenX,\n                  'screenY': first.screenY,\n                  'clientX': first.clientX,\n                  'clientY': first.clientY\n                });\n              } else {\n                simulatedEvent = document.createEvent('MouseEvent');\n                simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0\n                /*left*/\n                , null);\n              }\n\n              first.target.dispatchEvent(simulatedEvent);\n            };\n          };\n        };\n\n        Touch.init = function ($) {\n          if (typeof $.spotSwipe === 'undefined') {\n            Touch.setupSpotSwipe($);\n            Touch.setupTouchHandler($);\n          }\n        };\n        /***/\n\n      },\n\n      /***/\n      \"./js/foundation.util.triggers.js\":\n      /*!****************************************!*\\\n        !*** ./js/foundation.util.triggers.js ***!\n        \\****************************************/\n\n      /*! exports provided: Triggers */\n\n      /***/\n      function jsFoundationUtilTriggersJs(module, __webpack_exports__, __webpack_require__) {\n        \"use strict\";\n\n        __webpack_require__.r(__webpack_exports__);\n        /* harmony export (binding) */\n\n\n        __webpack_require__.d(__webpack_exports__, \"Triggers\", function () {\n          return Triggers;\n        });\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n        /*! jquery */\n        \"jquery\");\n        /* harmony import */\n\n\n        var jquery__WEBPACK_IMPORTED_MODULE_0___default =\n        /*#__PURE__*/\n        __webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n        /* harmony import */\n\n\n        var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n        /*! ./foundation.core.utils */\n        \"./js/foundation.core.utils.js\");\n        /* harmony import */\n\n\n        var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n        /*! ./foundation.util.motion */\n        \"./js/foundation.util.motion.js\");\n\n        function _typeof(obj) {\n          if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n            _typeof = function _typeof(obj) {\n              return _typeof2(obj);\n            };\n          } else {\n            _typeof = function _typeof(obj) {\n              return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n            };\n          }\n\n          return _typeof(obj);\n        }\n\n        var MutationObserver = function () {\n          var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\n\n          for (var i = 0; i < prefixes.length; i++) {\n            if (\"\".concat(prefixes[i], \"MutationObserver\") in window) {\n              return window[\"\".concat(prefixes[i], \"MutationObserver\")];\n            }\n          }\n\n          return false;\n        }();\n\n        var triggers = function triggers(el, type) {\n          el.data(type).split(' ').forEach(function (id) {\n            jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(id))[type === 'close' ? 'trigger' : 'triggerHandler'](\"\".concat(type, \".zf.trigger\"), [el]);\n          });\n        };\n\n        var Triggers = {\n          Listeners: {\n            Basic: {},\n            Global: {}\n          },\n          Initializers: {}\n        };\n        Triggers.Listeners.Basic = {\n          openListener: function openListener() {\n            triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'open');\n          },\n          closeListener: function closeListener() {\n            var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('close');\n\n            if (id) {\n              triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'close');\n            } else {\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('close.zf.trigger');\n            }\n          },\n          toggleListener: function toggleListener() {\n            var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle');\n\n            if (id) {\n              triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'toggle');\n            } else {\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('toggle.zf.trigger');\n            }\n          },\n          closeableListener: function closeableListener(e) {\n            e.stopPropagation();\n            var animation = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('closable');\n\n            if (animation !== '') {\n              _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__[\"Motion\"].animateOut(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), animation, function () {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('closed.zf');\n              });\n            } else {\n              jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).fadeOut().trigger('closed.zf');\n            }\n          },\n          toggleFocusListener: function toggleFocusListener() {\n            var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle-focus');\n            jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(id)).triggerHandler('toggle.zf.trigger', [jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)]);\n          }\n        }; // Elements with [data-open] will reveal a plugin that supports it when clicked.\n\n        Triggers.Initializers.addOpenListener = function ($elem) {\n          $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);\n          $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);\n        }; // Elements with [data-close] will close a plugin that supports it when clicked.\n        // If used without a value on [data-close], the event will bubble, allowing it to close a parent component.\n\n\n        Triggers.Initializers.addCloseListener = function ($elem) {\n          $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);\n          $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);\n        }; // Elements with [data-toggle] will toggle a plugin that supports it when clicked.\n\n\n        Triggers.Initializers.addToggleListener = function ($elem) {\n          $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);\n          $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);\n        }; // Elements with [data-closable] will respond to close.zf.trigger events.\n\n\n        Triggers.Initializers.addCloseableListener = function ($elem) {\n          $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);\n          $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);\n        }; // Elements with [data-toggle-focus] will respond to coming in and out of focus\n\n\n        Triggers.Initializers.addToggleFocusListener = function ($elem) {\n          $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);\n          $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);\n        }; // More Global/complex listeners and triggers\n\n\n        Triggers.Listeners.Global = {\n          resizeListener: function resizeListener($nodes) {\n            if (!MutationObserver) {\n              //fallback for IE 9\n              $nodes.each(function () {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('resizeme.zf.trigger');\n              });\n            } //trigger all listening elements and signal a resize event\n\n\n            $nodes.attr('data-events', \"resize\");\n          },\n          scrollListener: function scrollListener($nodes) {\n            if (!MutationObserver) {\n              //fallback for IE 9\n              $nodes.each(function () {\n                jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('scrollme.zf.trigger');\n              });\n            } //trigger all listening elements and signal a scroll event\n\n\n            $nodes.attr('data-events', \"scroll\");\n          },\n          closeMeListener: function closeMeListener(e, pluginId) {\n            var plugin = e.namespace.split('.')[0];\n            var plugins = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-\".concat(plugin, \"]\")).not(\"[data-yeti-box=\\\"\".concat(pluginId, \"\\\"]\"));\n            plugins.each(function () {\n              var _this = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n\n              _this.triggerHandler('close.zf.trigger', [_this]);\n            });\n          } // Global, parses whole document.\n\n        };\n\n        Triggers.Initializers.addClosemeListener = function (pluginName) {\n          var yetiBoxes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-yeti-box]'),\n              plugNames = ['dropdown', 'tooltip', 'reveal'];\n\n          if (pluginName) {\n            if (typeof pluginName === 'string') {\n              plugNames.push(pluginName);\n            } else if (_typeof(pluginName) === 'object' && typeof pluginName[0] === 'string') {\n              plugNames = plugNames.concat(pluginName);\n            } else {\n              console.error('Plugin names must be strings');\n            }\n          }\n\n          if (yetiBoxes.length) {\n            var listeners = plugNames.map(function (name) {\n              return \"closeme.zf.\".concat(name);\n            }).join(' ');\n            jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);\n          }\n        };\n\n        function debounceGlobalListener(debounce, trigger, listener) {\n          var timer,\n              args = Array.prototype.slice.call(arguments, 3);\n          jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(trigger).on(trigger, function (e) {\n            if (timer) {\n              clearTimeout(timer);\n            }\n\n            timer = setTimeout(function () {\n              listener.apply(null, args);\n            }, debounce || 10); //default time to emit scroll event\n          });\n        }\n\n        Triggers.Initializers.addResizeListener = function (debounce) {\n          var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-resize]');\n\n          if ($nodes.length) {\n            debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);\n          }\n        };\n\n        Triggers.Initializers.addScrollListener = function (debounce) {\n          var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-scroll]');\n\n          if ($nodes.length) {\n            debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);\n          }\n        };\n\n        Triggers.Initializers.addMutationEventsListener = function ($elem) {\n          if (!MutationObserver) {\n            return false;\n          }\n\n          var $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]'); //element callback\n\n          var listeningElementsMutation = function listeningElementsMutation(mutationRecordsList) {\n            var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(mutationRecordsList[0].target); //trigger the event handler for the element depending on type\n\n            switch (mutationRecordsList[0].type) {\n              case \"attributes\":\n                if ($target.attr(\"data-events\") === \"scroll\" && mutationRecordsList[0].attributeName === \"data-events\") {\n                  $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);\n                }\n\n                if ($target.attr(\"data-events\") === \"resize\" && mutationRecordsList[0].attributeName === \"data-events\") {\n                  $target.triggerHandler('resizeme.zf.trigger', [$target]);\n                }\n\n                if (mutationRecordsList[0].attributeName === \"style\") {\n                  $target.closest(\"[data-mutate]\").attr(\"data-events\", \"mutate\");\n                  $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n                }\n\n                break;\n\n              case \"childList\":\n                $target.closest(\"[data-mutate]\").attr(\"data-events\", \"mutate\");\n                $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n                break;\n\n              default:\n                return false;\n              //nothing\n            }\n          };\n\n          if ($nodes.length) {\n            //for each element that needs to listen for resizing, scrolling, or mutation add a single observer\n            for (var i = 0; i <= $nodes.length - 1; i++) {\n              var elementObserver = new MutationObserver(listeningElementsMutation);\n              elementObserver.observe($nodes[i], {\n                attributes: true,\n                childList: true,\n                characterData: false,\n                subtree: true,\n                attributeFilter: [\"data-events\", \"style\"]\n              });\n            }\n          }\n        };\n\n        Triggers.Initializers.addSimpleListeners = function () {\n          var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);\n          Triggers.Initializers.addOpenListener($document);\n          Triggers.Initializers.addCloseListener($document);\n          Triggers.Initializers.addToggleListener($document);\n          Triggers.Initializers.addCloseableListener($document);\n          Triggers.Initializers.addToggleFocusListener($document);\n        };\n\n        Triggers.Initializers.addGlobalListeners = function () {\n          var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);\n          Triggers.Initializers.addMutationEventsListener($document);\n          Triggers.Initializers.addResizeListener();\n          Triggers.Initializers.addScrollListener();\n          Triggers.Initializers.addClosemeListener();\n        };\n\n        Triggers.init = function ($, Foundation) {\n          Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__[\"onLoad\"])($(window), function () {\n            if ($.triggersInitialized !== true) {\n              Triggers.Initializers.addSimpleListeners();\n              Triggers.Initializers.addGlobalListeners();\n              $.triggersInitialized = true;\n            }\n          });\n\n          if (Foundation) {\n            Foundation.Triggers = Triggers; // Legacy included to be backwards compatible for now.\n\n            Foundation.IHearYou = Triggers.Initializers.addGlobalListeners;\n          }\n        };\n        /***/\n\n      },\n\n      /***/\n      0:\n      /*!****************************************!*\\\n        !*** multi ./js/entries/foundation.js ***!\n        \\****************************************/\n\n      /*! no static exports found */\n\n      /***/\n      function _(module, exports, __webpack_require__) {\n        module.exports = __webpack_require__(\n        /*! /Users/ncoden/Documents/Documents/Projects/Programmation/Web/2016/Foundation/foundation-sites/js/entries/foundation.js */\n        \"./js/entries/foundation.js\");\n        /***/\n      },\n\n      /***/\n      \"jquery\":\n      /*!********************************************************************************************!*\\\n        !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n        \\********************************************************************************************/\n\n      /*! no static exports found */\n\n      /***/\n      function jquery(module, exports) {\n        module.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n        /***/\n      }\n      /******/\n\n    })\n  );\n});\n\n},{\"jquery\":44}],44:[function(require,module,exports){\n/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n\n},{}],45:[function(require,module,exports){\n/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n\n},{}],46:[function(require,module,exports){\n/**\n  shave - Shave is a javascript plugin that truncates multi-line text within a html element based on set max height\n  @version v2.5.10\n  @link https://github.com/yowainwright/shave#readme\n  @author Jeff Wainwright <yowainwright@gmail.com> (jeffry.in)\n  @license MIT\n**/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.shave = factory());\n}(this, (function () { 'use strict';\n\n  function shave(target, maxHeight) {\n    var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (typeof maxHeight === 'undefined' || isNaN(maxHeight)) throw Error('maxHeight is required');\n    var els = typeof target === 'string' ? document.querySelectorAll(target) : target;\n    if (!els) return;\n    var character = opts.character || '&mldr;';\n    var classname = opts.classname || 'js-shave';\n    var spaces = typeof opts.spaces === 'boolean' ? opts.spaces : true;\n    var charclassname = opts.charclassname || 'js-shave-char';\n    var charHtml = \"<span class=\\\"\".concat(charclassname, \"\\\">\").concat(character, \"</span>\");\n    if (!('length' in els)) els = [els];\n\n    for (var i = 0; i < els.length; i += 1) {\n      var el = els[i];\n      var styles = el.style;\n      var span = el.querySelector(\".\".concat(classname));\n      var textProp = el.textContent === undefined ? 'innerText' : 'textContent'; // If element text has already been shaved\n\n      if (span) {\n        // Remove the ellipsis to recapture the original text\n        el.removeChild(el.querySelector(\".\".concat(charclassname)));\n        el[textProp] = el[textProp]; // eslint-disable-line\n        // nuke span, recombine text\n      }\n\n      var fullText = el[textProp];\n      var words = spaces ? fullText.split(' ') : fullText; // If 0 or 1 words, we're done\n\n      if (words.length < 2) continue; // Temporarily remove any CSS height for text height calculation\n\n      var heightStyle = styles.height;\n      styles.height = 'auto';\n      var maxHeightStyle = styles.maxHeight;\n      styles.maxHeight = 'none'; // If already short enough, we're done\n\n      if (el.offsetHeight <= maxHeight) {\n        styles.height = heightStyle;\n        styles.maxHeight = maxHeightStyle;\n        continue;\n      } // Binary search for number of words which can fit in allotted height\n\n\n      var max = words.length - 1;\n      var min = 0;\n      var pivot = void 0;\n\n      while (min < max) {\n        pivot = min + max + 1 >> 1; // eslint-disable-line no-bitwise\n\n        el[textProp] = spaces ? words.slice(0, pivot).join(' ') : words.slice(0, pivot);\n        el.insertAdjacentHTML('beforeend', charHtml);\n        if (el.offsetHeight > maxHeight) max = pivot - 1;else min = pivot;\n      }\n\n      el[textProp] = spaces ? words.slice(0, max).join(' ') : words.slice(0, max);\n      el.insertAdjacentHTML('beforeend', charHtml);\n      var diff = spaces ? \" \".concat(words.slice(max).join(' ')) : words.slice(max);\n      var shavedText = document.createTextNode(diff);\n      var elWithShavedText = document.createElement('span');\n      elWithShavedText.classList.add(classname);\n      elWithShavedText.style.display = 'none';\n      elWithShavedText.appendChild(shavedText);\n      el.insertAdjacentElement('beforeend', elWithShavedText);\n      styles.height = heightStyle;\n      styles.maxHeight = maxHeightStyle;\n    }\n  }\n\n  return shave;\n\n})));\n\n},{}]},{},[2]);\n"],"file":"../app.js"}